[Powered by Google Translate] Nate HARDISON: Apabila anda telah mendapat pelbagai program terbuka pada komputer, ia seolah-olah seperti segala-galanya berjalan pada masa yang sama. Sebagai contoh, anda mungkin bekerja di pelayar web seperti Firefox atau Internet Explorer, mendengar muzik pada iTunes, dan menulis esei dengan Word. Walau bagaimanapun, di bawah hood, program sebenarnya menjalankan satu pada satu-satu masa. Ia adalah tugas sistem operasi, Windows, Mac OSX, atau Linux, untuk menguruskan setiap proses yang berasingan, seperti program yang dikenali, dan bertukar-tukar antara mereka begitu bahawa apabila anda pergi dari menyemak halaman Facebook anda untuk bekerja pada esei anda sekali lagi, Word adalah salah satu yang berjalan. Kadang-kadang, walaupun, kita mahu program diri untuk dapat untuk melakukan perkara-perkara pelbagai seperti ini, terlalu. Jika anda seperti saya, anda mungkin mempunyai sekumpulan tab yang berbeza dibuka dalam pelayar web anda, satu untuk e-mel, satu dengan kalendar, dan sebagainya. Kita boleh merawat setiap tab sebagai program atau proses yang berasingan, seperti Google Chrome tidak, tetapi banyak program menggunakan ringan-berat versi proses yang dipanggil benang. Benang adalah hanya satu lagi unit pemprosesan, satu set arahan atau kod yang boleh "lari", unquote quote, serentak dengan benang lain. Ini adalah apa yang membuatkan ia mustahil bagi anda untuk melayari Facebook sambil mendengar kepada saya di latar belakang atau mempunyai dua Video YouTube bermain pada masa yang sama. Jadi, topik ini umum, dikenali sebagai keserentakan, biasanya tidak datang begitu awal dalam kursus-kursus sains komputer kerana butiran rendah tahap memerlukan perbincangan sistem operasi dan sebagainya. Walau bagaimanapun, bahasa pengaturcaraan yang kita gunakan di bermula CS50, Awal, menyediakan beberapa alat yang bagus untuk membuat ia lebih mudah untuk menulis program dengan perkara-perkara pelbagai berlaku pada sekali. Apabila anda membina program Gores, anda sentiasa bekerja dengan benang. Setiap skrip Awal, yang merupakan blok kod yang bermula dengan salah "apabila" keping teka-teki, boleh dianggap sebagai benang berasingan. Mari kita lihat pada program Gores mudah untuk melihat bagaimana kerja-kerja ini. Di sini, kita telah mendapat objek ikan, atau bidadari, dengan dua skrip bahawa kedua-dua permulaan apabila kita klik butang bendera hijau sedikit. Skrip pertama mengawal gerakan ikan. Apabila bendera hijau diklik, ikan mendapat diletakkan pada sebelah kiri skrin, yang dipanggil pentas, menghadap ke kanan. Kemudian, dalam satu set arahan yang akan menjalankan selama-lamanya, sehingga kita menghentikan program, ikan meluncur ke sebelah kanan, bertukar sekitar, kembali ke sebelah kiri, dan bertukar sekitar lagi. Skrip kedua mengawal proses pemikiran ikan. Ia ternyata bahawa ini adalah ikan lapar. Jadi selepas menunggu selama 3 saat, ikan akan berfikir, "Saya lapar," untuk sesaat keempat. Script ini juga berjalan selama-lamanya. Dan seperti yang kita lihat, daripada menjalankan program dengan mengklik bendera hijau, kedua-dua skrip muncul untuk melaksanakan serentak. Ikan bergerak dan berfikir pada masa yang sama. Sejak ikan miskin kelihatan begitu lapar, mari kita menambah dalam beberapa sedutan cheesy untuk ia makan. Semoga mereka tidak akan hancur di dalam air. Apabila kita menambah dalam bidadari kedua, kita juga akan dapat menambah dalam skrip yang sepadan dengan bidadari itu. Dan, dengan itu, ada akan menjadi satu lagi set benang yang akan lari. Untuk memberi pengguna kawalan program kami lebih apabila ikan lapar mendapat makanan, mari kita mengatakan bahawa apabila Angkasa Bar melanda, sedutan cheesy muncul di atas pentas untuk ikan untuk makan. Sebelum kita melanda Space Bar, kita akan mahu menyimpan cheesy sedutan tersembunyi supaya ikan tidak boleh melihat mereka. Untuk melakukan ini, kita akan memerlukan beberapa skrip untuk sedutan cheesy bidadari. Skrip pertama, bendera hijau, hanya akan menyembunyikan makanan. Berbeza dengan skrip lain yang kami telah ditulis, yang satu ini tidak akan menyimpan berjalan selama-lamanya. Ia akan mula dan selesai dengan cepat, betul apabila kita klik bendera butang hijau. Skrip depan kita akan menunggu untuk Space Bar untuk menjadi ditekan sebelum melaksanakan. Kita boleh memanggil menunggu untuk input pengguna "menunggu" atau "mendengar" untuk sebuah acara. Dan kod yang melaksanakan apabila sesuatu acara diterima atau mendengar dipanggil kod pengendalian acara. Bar Ruang pengendali acara kami akan menunjukkan sedutan cheesy pada skrin supaya ikan boleh makan mereka. Pada ketika ini, segala-galanya mencari yang baik. Perkara seterusnya yang perlu kita lakukan adalah untuk memikirkan bagaimana untuk mendapatkan ikan untuk menyedari bahawa terdapat makanan untuk makan. Mari kita menambah thread lain untuk ikan yang sentiasa cek sama ada atau tidak ia menyentuh sedutan cheesy. Kami melakukan ini dalam thread berasingan sejak cara yang boleh kita sentiasa memeriksa untuk makanan. Jika tidak, kita hanya akan dapat berkala memeriksa makanan di antara meluncur, memulihkan, menunggu, atau berfikir. OK. Sekarang mari ini menjalankan program Gores kita. Seperti yang dijangka, makanan segera menyembunyikan dan ikan lapar berenang ke belakang dan sebagainya seperti sebelum. Apabila kita melanda Space Bar, sedutan cheesy mula melihat, dan ikan lapar mengatakan suara burung hantu. Tetapi tunggu, yang pelik. Bagaimana datang ikan "Saya lapar" mengganggu pemikiran barangan lain? Ini adalah kerana kita tidak menubuhkan apa-apa penyelarasan antara tiga skrip ikan. Setiap berjalan dalam thread sendiri, sedar dengan apa yang lain lakukan. Mari kita menetapkan ini sebelum kita beralih. Penyelarasan antara benang adalah satu tugas yang sukar kerana kita tidak mempunyai kawalan keatas apabila setiap thread berjalan atau tidak berjalan. Untuk menghantar mesej dari satu thread yang lain, kita perlu untuk menggunakan pembolehubah yang kita boleh menetapkan, atau menulis, dalam satu thread dan membaca di lain-lain. Mari kita mewujudkan satu foodFound ubah dipanggil bahawa kita boleh menetapkan benar apabila ikan berjalan ke sedutan cheesy. Nah, sudah tentu, kita mahu memastikan bahawa kita tetapkan palsu mulanya. Kemudian, dalam thread pemikiran ikan, kita akan memeriksa untuk melihat jika ikan telah didapati makanan sebelum memaparkan "saya lapar" pemikiran gelembung. Sekarang, menjalankan program ini sekali lagi, kita lihat bahawa ikan tidak diganggu dengan fikiran kelaparan apabila sedutan cheesy keluar. Masalah akhir yang kita ada adalah bahawa sedutan cheesy tidak pergi jauh selepas ikan, memetik unquote, "makan" mereka. Dari skrip ikan, tidak ada cara mudah untuk menyembunyikan cheesy sedutan, jadi kita perlu untuk menghantar mesej kepada sedutan cheesy bidadari untuk menyembunyikan dirinya. Kita boleh melakukan ini dengan pembolehubah lain bahawa sedutan cheesy bidadari mempunyai akses kepada, serta bidadari ikan. Walau bagaimanapun, terdapat satu cara yang bersih untuk melakukan ini dalam kes ini, sejak bukannya menghantar mesej kepada skrip itu di suatu tempat di tengah-tengah melaksanakan, kita boleh menghantar mesej kepada skrip yang menunggu untuk bermula. Kami melakukan ini dengan mempunyai ikan menyiarkan acara, salah kami akan memanggil dimakan. Kemudian, kita akan mencipta skrip untuk sedutan cheesy yang akan tunggu untuk acara ini. Ini adalah serupa dengan acara Space Bar, kecuali bahawa ini masa, pengguna tidak langsung mencetuskan acara. Sekarang semua yang perlu kita lakukan adalah menetapkan belakang pembolehubah foodFound kami palsu, dan kita kini boleh memberi ikan lapar kerana ramai hidangan sedutan cheesy kerana ia mahu. Jadi tidak terlalu buruk, betul? Di C, menulis program multi-threaded adalah lebih rumit, tetapi asasnya adalah sama. Bagaimanapun, saya berharap anda mempunyai masa yang hebat membina berseronok program serentak dalam Scratch. Nama saya adalah Nate Hardison. Ini adalah CS50.