[Powered by Google Translate] NATE Hardison: Bila Anda punya beberapa program terbuka pada
komputer, sepertinya semuanya
berjalan pada waktu yang sama.
Sebagai contoh, Anda mungkin bekerja di web browser seperti
Firefox atau Internet Explorer, mendengarkan musik di iTunes,
dan menulis esai dengan Word.
Namun, di bawah tenda, program sebenarnya
dijalankan satu per satu.
Ini adalah tugas dari sistem operasi, Windows, Mac OSX, atau
Linux, untuk mengelola masing-masing proses terpisah, sebagai
program diketahui, dan beralih di antara mereka sehingga ketika Anda
pergi dari Anda memeriksa halaman Facebook untuk bekerja pada esai Anda
lagi, Firman adalah salah satu yang berjalan.
>> Kadang-kadang, meskipun, kita ingin program itu sendiri untuk dapat
untuk melakukan beberapa hal seperti ini, juga.
Jika Anda seperti saya, Anda mungkin memiliki banyak
tab yang berbeda terbuka di browser web Anda, satu untuk email,
satu dengan kalender, dan sebagainya.
Kita bisa memperlakukan setiap tab sebagai program yang terpisah atau proses,
seperti Google Chrome tidak, tapi banyak program menggunakan
ringan versi proses yang disebut thread.
>> Sebuah thread hanyalah unit pengolahan, satu set
instruksi atau kode yang dapat "dijalankan", tanda kutip kutipan,
bersamaan dengan benang lainnya.
Inilah yang memungkinkan Anda untuk browsing Facebook
sambil mendengarkan saya di latar belakang atau untuk memiliki dua
Video YouTube bermain pada waktu yang sama.
Jadi, ini topik umum, yang dikenal sebagai konkurensi, biasanya
tidak datang begitu awal dalam kursus ilmu komputer
karena tingkat rendah rincian membutuhkan diskusi
sistem operasi dan sejenisnya.
Namun, bahasa pemrograman yang kita gunakan di
awal CS50, Scratch, menyediakan beberapa alat bagus untuk
membuatnya lebih mudah untuk menulis program dengan beberapa hal
terjadi sekaligus.
>> Ketika Anda membangun program Scratch, Anda terus-menerus
bekerja dengan benang.
Setiap naskah Scratch, yang merupakan blok kode yang diawali dengan
salah satu potongan puzzle "ketika", dapat dianggap
sebagai thread terpisah.
Mari kita lihat sebuah program Scratch sederhana untuk melihat bagaimana ini bekerja.
>> Di sini, kita punya objek ikan, atau sprite, dengan dua script
yang dimulai baik ketika kita klik tombol bendera kecil berwarna hijau.
Script pertama mengontrol gerak ikan.
Ketika bendera hijau diklik, ikan akan ditempatkan
di sisi kiri layar, yang disebut panggung,
menghadap ke kanan.
Kemudian, dalam satu set instruksi yang akan dijalankan selamanya, sampai kita
menghentikan program, ikan meluncur ke sisi kanan,
berbalik, kembali ke sisi kiri, dan
berbalik lagi.
Script kedua mengontrol proses berpikir ikan itu.
Ternyata bahwa ini adalah ikan lapar.
Jadi setelah menunggu selama 3 detik, ikan akan berpikir,
"Aku lapar," untuk kedua keempat.
Script ini juga berjalan selamanya.
Dan seperti yang kita lihat, dari menjalankan program dengan mengklik
bendera hijau, kedua script tampaknya mengeksekusi
secara bersamaan.
Ikan bergerak dan berpikir pada saat yang sama.
>> Karena ikan miskin terlihat begitu lapar, mari kita tambahkan di beberapa
murahan puff untuk itu untuk makan.
Mudah-mudahan mereka tidak akan hancur dalam air.
Ketika kita menambahkan dalam sprite kedua, kita juga akan dapat
menambahkan skrip sesuai dengan sprite itu.
Dan, karena itu, akan ada satu set
benang yang akan dijalankan.
Untuk memberikan pengguna kontrol atas program kami ketika
Ikan lapar mendapatkan makanan, mari kita mengatakan bahwa setiap kali Space
Bar terkena, puffs cheesy muncul di panggung untuk
ikan untuk dimakan.
Sebelum kita memukul Space Bar, kita akan ingin menyimpan murahan
puff tersembunyi sehingga ikan tidak bisa melihat mereka.
Untuk melakukan hal ini, kita akan membutuhkan beberapa script untuk
murahan puff sprite.
Naskah pertama, bendera hijau, hanya akan menyembunyikan makanan.
Berbeda dengan script lain kita telah menulis, yang satu ini tidak akan terus
berjalan selamanya.
Ini akan mulai dan selesai sangat cepat, tepat ketika kita klik
tombol hijau bendera.
>> Script berikutnya yang kita miliki akan menunggu untuk Space Bar untuk menjadi
ditekan sebelum mengeksekusi.
Kita bisa memanggil menunggu input pengguna "menunggu" atau "mendengarkan"
untuk sebuah event.
Dan kode yang mengeksekusi ketika sebuah peristiwa diterima atau
mendengar disebut acara kode penanganan.
Space Bar kami event handler akan menampilkan puffs cheesy pada
layar sehingga ikan bisa makan mereka.
Pada titik ini, semuanya terlihat baik.
>> Hal berikutnya yang perlu kita lakukan adalah untuk mencari tahu bagaimana untuk mendapatkan
ikan untuk menyadari bahwa ada makanan untuk dimakan.
Mari kita tambahkan thread lain untuk ikan yang terus-menerus
memeriksa apakah atau tidak itu menyentuh puff cheesy.
Kami melakukan ini di thread terpisah sejak itu kita bisa
terus-menerus memeriksa untuk makanan.
Jika tidak, kita hanya akan dapat secara berkala memeriksa untuk makanan
di antara meluncur, berbalik, menunggu, atau berpikir.
>> OK.
Sekarang mari kita menjalankan program Scratch kami.
Seperti yang diharapkan, makanan segera menyembunyikan dan
Ikan lapar berenang bolak-balik seperti sebelumnya.
Ketika kita memukul Space Bar, puff murahan datang ke tampilan,
dan ikan lapar kata whoo.
Tapi tunggu, itu aneh.
Bagaimana datang ikan "Aku lapar" mengganggu pikiran
hal-hal lain?
Hal ini karena kita tidak membangun koordinasi setiap
antara tiga skrip ikan.
Masing-masing berjalan di thread sendiri, menyadari apa yang
orang lain lakukan.
Mari kita perbaiki ini sebelum kita melanjutkan.
>> Koordinasi antara benang adalah tugas yang rumit karena kita
tidak memiliki kontrol eksplisit atas ketika setiap thread berjalan atau
tidak berjalan.
Untuk mengirim pesan dari satu thread ke yang lain, kita harus
menggunakan variabel yang kita dapat mengatur, atau menulis, dalam satu thread
dan membaca yang lain.
Mari kita membuat foodFound disebut variabel yang kita dapat diatur untuk
benar ketika ikan berlari ke puff cheesy.
Yah, tentu saja, kami ingin memastikan bahwa kami set ke
palsu awalnya.
Kemudian, di thread pemikiran ikan, kami akan memeriksa untuk melihat apakah
ikan telah menemukan makanan sebelum menampilkan "Aku lapar"
berpikir gelembung.
>> Sekarang, menjalankan program lagi, kita melihat bahwa ikan
tidak bisa terganggu dengan pikiran kelaparan ketika
puffs cheesy berada di luar.
Masalah terakhir yang kita miliki adalah bahwa puffs cheesy tidak pergi
pergi setelah ikan, mengutip tanda kutip, "makan" mereka.
Dari script ikan, tidak ada cara mudah untuk menyembunyikan murahan
puff, jadi kita perlu mengirim pesan ke puffs cheesy
sprite untuk menyembunyikan diri.
Kita bisa melakukan ini dengan variabel lain yang murahan puff
sprite memiliki akses ke, serta sprite ikan.
>> Namun, ada cara yang bersih untuk melakukan hal ini dalam kasus ini,
sejak daripada mengirim pesan ke script yang
di suatu tempat di tengah-tengah melaksanakan, kita dapat mengirim
pesan ke script yang menunggu untuk memulai.
Kami melakukan ini dengan memiliki ikan menyiarkan acara, salah satu kita akan
sebut dimakan.
Kemudian, kita akan membuat script untuk puffs cheesy yang akan
menunggu acara ini.
Hal ini mirip dengan acara Space Bar, kecuali bahwa ini
waktu, pengguna bukan satu langsung memicu acara tersebut.
Sekarang yang harus kita lakukan adalah mengatur kembali variabel foodFound kami
menjadi false, dan kita sekarang dapat memberikan ikan lapar sebanyak
porsi puffs cheesy karena ingin.
>> Jadi tidak terlalu buruk, kan?
Dalam C, menulis multi-threaded program yang lebih rumit,
tapi dasar-dasar yang sama.
Anyway, saya harap Anda memiliki banyak waktu membangun beberapa menyenangkan
bersamaan program Scratch.
Nama saya adalah Nate Hardison.
Ini adalah CS50.