[Powered by Google Translate] NATE hardison: Khi bạn đã có nhiều chương trình mở trên một
máy tính, nó có vẻ như tất cả mọi thứ
chạy cùng một lúc.
Ví dụ, bạn có thể được làm việc trong một trình duyệt web như
Firefox hoặc Internet Explorer, nghe nhạc trên iTunes,
và viết một bài luận với Word.
Tuy nhiên, dưới mui xe, các chương trình thực sự
chạy một tại một thời điểm.
Đó là công việc của hệ điều hành, Windows, Mac OSX, hoặc
Linux, để quản lý các quy trình riêng biệt, như là
chương trình này được biết đến, và chuyển đổi giữa chúng để khi bạn
đi kiểm tra trang Facebook của bạn để làm việc trên bài luận của bạn
một lần nữa, Word là một trong đó là chạy.
>> Đôi khi, mặc dù, chúng tôi muốn chương trình tự để có thể
làm nhiều điều như thế này, quá.
Nếu bạn đang như tôi, bạn có thể có một loạt các
các tab khác nhau mở ra trong trình duyệt web của bạn, một cho email,
một với lịch, và như vậy.
Chúng ta có thể đối xử với mỗi tab là một chương trình riêng biệt hoặc những quá trình,
như Google Chrome không có gì, nhưng nhiều chương trình sử dụng một
phiên bản trọng lượng nhẹ của một quá trình được gọi là một sợi.
>> Một sợi chỉ là một đơn vị chế biến, một bộ
hướng dẫn hoặc mã có thể "chạy", quote unquote,
đồng thời với các chủ đề khác.
Đây là những gì làm cho nó có thể cho bạn để duyệt Facebook
trong khi nghe tôi trong nền hoặc có hai
Video YouTube đang chơi cùng một lúc.
Vì vậy, chủ đề chung này, được gọi là đồng thời, thường
không đi lên ngay từ đầu khóa học khoa học máy tính
bởi vì các chi tiết cấp thấp hơn yêu cầu thảo luận
hệ điều hành và các loại tương tự.
Tuy nhiên, các ngôn ngữ lập trình, chúng tôi sử dụng tại
đầu CS50, Scratch, cung cấp một số công cụ tiện lợi để
làm cho nó dễ dàng hơn để viết các chương trình với nhiều điều
xảy ra cùng một lúc.
>> Khi bạn xây dựng các chương trình Scratch, bạn liên tục
làm việc với các chủ đề.
Mỗi kịch bản Scratch, mà là một khối mã bắt đầu với
một trong những "khi" mảnh ghép, có thể được coi
như là một chủ đề riêng biệt.
Hãy xem xét một chương trình Scratch đơn giản để xem cách làm việc này.
>> Ở đây, chúng tôi đã có một đối tượng cá, hoặc sprite, với hai kịch bản
rằng cả hai bắt đầu khi chúng ta nhấn vào nút lá cờ nhỏ màu xanh lá cây.
Các kịch bản đầu tiên kiểm soát chuyển động của cá.
Khi lá cờ màu xanh lá cây được nhấp, cá bị đặt
ở phía bên trái của màn hình, được gọi là sân khấu,
phải đối mặt với bên phải.
Sau đó, trong một tập hợp các hướng dẫn sẽ chạy mãi mãi, cho đến khi chúng tôi
dừng chương trình, cá lướt nhẹ về phía bên phải,
quay lại, quay ngược lại về phía bên trái, và
quay lại một lần nữa.
Kịch bản thứ hai điều khiển quá trình suy nghĩ của cá.
Nó chỉ ra rằng đây là một con cá đói.
Vì vậy, sau khi chờ đợi 3 giây, con cá sẽ nghĩ,
"Tôi đói", cho một thứ hai thứ tư.
Kịch bản này cũng chạy mãi mãi.
Và như chúng ta thấy, từ chạy chương trình bằng cách nhấn vào
màu xanh lá cây cờ, cả hai tập tin xuất hiện để thực hiện
cùng một lúc.
Cá di chuyển và nghĩ rằng cùng một lúc.
>> Kể từ khi cá nghèo trông đói quá, chúng ta hãy thêm vào một số
cheesy nhát cho nó ăn.
Hy vọng rằng họ sẽ không tan rã trong nước.
Khi chúng ta thêm vào một ma thứ hai, chúng tôi cũng sẽ có thể
thêm vào trong kịch bản tương ứng với ma đó.
Và, do đó, có sẽ là một tập hợp các
chủ đề sẽ chạy.
Để cung cấp cho người sử dụng của chương trình kiểm soát của chúng tôi hơn khi
đói cá được thực phẩm, chúng ta hãy nói rằng bất cứ khi nào không gian
Bar là hit, nhát cheesy xuất hiện trên sân khấu.
cá để ăn.
Trước khi chúng tôi nhấn thanh Space, chúng tôi sẽ muốn giữ cheesy
nhát ẩn để cá không thể nhìn thấy chúng.
Để làm điều này, chúng tôi sẽ cần một vài kịch bản cho
cheesy nhát ma.
Các kịch bản đầu tiên, lá cờ màu xanh lá cây, sẽ giấu thức ăn.
Không giống như các kịch bản khác mà chúng tôi đã viết, một trong những điều này sẽ không giữ
chạy mãi mãi.
Nó sẽ bắt đầu và kết thúc rất nhanh chóng, ngay khi chúng ta click
nút lá cờ màu xanh lá cây.
>> Các kịch bản tiếp theo chúng ta sẽ chờ đợi cho thanh Space để
ép trước khi thực hiện.
Chúng ta có thể chờ cuộc gọi cho người sử dụng đầu vào "chờ đợi" hay "lắng nghe"
cho một sự kiện.
Và mã để thực thi khi một sự kiện được nhận hoặc
nghe được gọi là mã xử lý sự kiện.
Space Bar xử lý sự kiện của chúng tôi sẽ hiển thị các nhát cheesy trên
màn hình để cá có thể ăn chúng.
Tại thời điểm này, mọi thứ đều tốt.
>> Điều tiếp theo chúng ta cần làm là tìm hiểu làm thế nào để có được
cá để nhận ra rằng có thực phẩm để ăn.
Hãy thêm một thread để cá liên tục
kiểm tra có hay không nó chạm vào nhát cheesy.
Chúng tôi làm điều này trong một thread riêng biệt vì đó là cách chúng ta có thể
liên tục kiểm tra cho thực phẩm.
Nếu không, chúng tôi chỉ muốn có thể kiểm tra định kỳ đối với thực phẩm
giữa trượt, quay lại, chờ đợi, hoặc suy nghĩ.
>> OK.
Bây giờ hãy chạy chương trình Scratch của chúng tôi.
Theo dự kiến, các thực phẩm ngay lập tức ẩn và
đói cá bơi qua lại giống như trước đây.
Khi chúng ta nhấn thanh Space, nhát cheesy đi vào xem,
và cá đói nói whoo.
Nhưng chờ đợi, đó là lạ.
Làm thế nào đến cá "Tôi đói" làm gián đoạn suy nghĩ
các công cụ khác?
Điều này là bởi vì chúng tôi đã không thiết lập bất kỳ phối hợp
giữa ba kịch bản cá.
Mỗi đang chạy trong thread riêng của mình, quên những gì các
người khác đang làm.
Hãy để sửa lỗi này trước khi chúng tôi di chuyển trên.
>> Phối hợp giữa các chủ đề là một nhiệm vụ khó khăn vì chúng ta
không có kiểm soát rõ ràng hơn khi mỗi thread chạy hoặc
không chạy.
Để gửi một tin nhắn từ một trong những chủ đề khác, chúng tôi sẽ cần
sử dụng một biến mà chúng ta có thể thiết lập, hoặc viết, trong một thread
và đọc trong khác.
Hãy tạo ra một foodFound gọi là biến mà chúng ta có thể thiết lập để
đúng khi cá chạy vào nhát cheesy.
Vâng, tất nhiên, chúng tôi muốn đảm bảo rằng chúng tôi đặt nó vào
sai ban đầu.
Sau đó, trong luồng suy nghĩ của cá, chúng tôi sẽ kiểm tra để xem nếu
cá đã tìm thấy thức ăn trước khi hiển thị "Tôi đói"
nghĩ rằng bong bóng.
>> Bây giờ, chạy chương trình một lần nữa, chúng ta thấy rằng loài cá
không bị gián đoạn suy nghĩ của đói
nhát cheesy.
Vấn đề cuối cùng chúng ta có là rằng nhát cheesy không đi
đi sau khi cá, trích dẫn unquote, "ăn".
Từ kịch bản cá, không có cách nào dễ dàng để ẩn cheesy
nhát, vì vậy chúng tôi cần phải gửi một thông điệp tới các nhát cheesy
sprite để ẩn thân.
Chúng ta có thể làm điều này với một biến khác mà nhát cheesy
sprite có quyền truy cập, cũng như sprite cá.
>> Tuy nhiên, có một cách sạch hơn để làm điều này trong trường hợp này,
kể từ khi thay vì gửi một thông điệp đến một kịch bản đó là
một nơi nào đó ở giữa thực hiện, chúng tôi có thể gửi
tin nhắn đến một kịch bản mà chờ đợi để bắt đầu.
Chúng tôi làm điều này bằng cách có cá phát sóng một sự kiện, một trong chúng tôi sẽ
gọi ăn.
Sau đó, chúng tôi sẽ tạo ra một kịch bản cho các nhát cheesy sẽ
chờ cho sự kiện này.
Điều này cũng tương tự như sự kiện Bar Space, ngoại trừ việc này
thời gian, người sử dụng không phải là người trực tiếp gây ra sự kiện.
Bây giờ tất cả chúng ta phải làm là thiết lập biến foodFound của chúng tôi trở lại
là sai, và bây giờ chúng tôi có thể cung cấp cho các cá đói như nhiều người
phần nhát cheesy như nó muốn.
>> Vì vậy, không quá xấu, phải không?
Trong C, viết các chương trình đa luồng là phức tạp hơn,
nhưng những điều cơ bản là giống nhau.
Dù sao, tôi hy vọng bạn có một thời gian tuyệt vời xây dựng một số thú vị
đồng thời các chương trình trong Scratch.
Tên là Nate hardison.
Đây là CS50.