[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.