Prinsip Konkurensi (Principles of Concurrency)

Monday, April 19, 2010

Konkurensi adalah proses interleaving pada waktunya untuk memberikan tampilan eksekusi simultan. Oleh karena itu berbeda dari paralelisme, yang menawarkan asli eksekusi simultan. Namun masalah dan kesulitan yang diajukan oleh dua tumpang tindih untuk sebagian besar:
  • Sumber daya global sulit berbagi dengan aman.
  • Alokasi optimal dari sumber daya sangat sulit.
  • Menemukan kesalahan pemrograman bisa sulit, karena konteks di mana kesalahan terjadi tidak selalu bisa direproduksi dengan mudah.
Paralelisme juga memperkenalkan prosesor isu yang berbeda dapat berjalan pada berbagai kecepatan, tapi sekali lagi masalah ini tercermin dalam konkurensi karena berbeda proses penyelesaian pada tingkat yang berbeda.

Sebuah Contoh Sederhana

Masalah mendasar dalam proses konkurensi adalah campur dengan masing-masing lainnya ketika mengakses sumber daya global bersama. Hal ini dapat diilustrasikan dengan mengherankan contoh sederhana:

chin = getchar();
chout = chin;
putchar(chout);

Bayangkan dua proses P1 dan P2 kedua melaksanakan kode ini di "sama" waktu, dengan interleaving berikut karena multi-programming.
  1. P1 memasuki kode ini, tapi terganggu setelah membaca karakter x ke dagu.
  2. P2 memasuki kode ini, dan berjalan ke penyelesaian, membaca dan menampilkan karakter y.
  3. P1 dilanjutkan, tapi dagu y sekarang berisi karakter, sehingga P1 menampilkan karakter yang salah.
Inti dari masalah adalah variabel dagu bersama global. P1 set dagu, tapi ini tulis kemudian hilang selama pelaksanaan P2. Solusi umum adalah untuk memungkinkan hanya satu proses pada suatu waktu untuk memasukkan kode yang mengakses chin : kode tersebut sering disebut critical section. Ketika satu proses berada di dalam bagian kode yang kritis, proses-proses lain harus dicegah masuk dalam bagian. Persyaratan ini dikenal sebagai saling pengecualian.

0 comments:

Post a Comment