Concurrency là gì

     

Tính toán đồng thời (Concurrency computing) là 1 trong những trong các đặc trưng nổi bật đã hình thành thế to gan của ngôn ngữ Java. Nhờ vào có tác dụng này, chúng ta cũng có thể tạo ra các chương trình bằng Java giải pháp xử lý nhiều nhiệm vụ cùng lúc, bên cạnh đó tận dụng thời gian nhàn rỗi để tăng tốc độ và tính năng của chương trình.

Bạn đang xem: Concurrency là gì

Tính toán mặt khác là gì?

Tính toán đồng thời là quy trình xử lý nhiều trách nhiệm được diễn ra trong cùng một khoảng chừng thời gian. Có mang này trái ngược với tính toán tuần từ bỏ (Sequentially computing) là quy trình xử lý chỉ một trọng trách trong đều thời điểm, kết thúc việc này mới ban đầu xử lý vấn đề tiếp theo. Một định nghĩa khác có liên quan cũng nên phân biệt với thống kê giám sát đồng thời, sẽ là khái niệm tính toán song tuy nhiên (Parallel computing). Tuy nhiên cả nhì khái niệm hầu hết có ý nghĩa sâu sắc là giải pháp xử lý nhiều trọng trách cùng một lúc, tuy vậy trong đo lường và thống kê song song, hai lệnh thực hiện cho nhì nhiệm vụ không giống nhau hoàn toàn độc lập với nhau và hoàn toàn có thể xảy ra vào thuộc thời điểm, trên hai máy vi tính hoặc cpu riêng biệt. đo lường và thống kê song song không thể tiến hành trên một máy tính xách tay chỉ tất cả bộ xử lý đơn lõi được. Còn trong tính toán đồng thời, về mặt toàn diện và tổng thể các nhiệm vụ diễn ra cùng nhau trong một khoảng thời hạn chung, nhưng các lệnh xử lý các nhiệm vụ có công dụng phải thực thi xen kẽ nhau tiếp tục trên thuộc một cỗ vi xử lý đơn lõi trong một thứ tính. Nói một cách solo giản, Tính toàn đồng thời thực hiện nhiều trọng trách cùng lúc, bằng những câu lệnh triển khai tuần tự.

Mặc dù rất nhiều sự so sánh đều khập khiễn, tuy vậy để dễ hình dung về những phương thức tổ chức xử lý dữ liệu theo dạng hình tuần tự, mặt khác hoặc tuy vậy song, bọn họ sẽ xem xét ví dụ minh họa sau để đối chiếu giữa những khái niệm trình diễn ở trên. Trả sử một quán ăn cần sẵn sàng 3 món ăn cho một bàn ăn khách hàng đặt. Phụ thuộc vào quy mô và ràng buộc về thời hạn thực hiện, quán ăn đó hoàn toàn có thể thực hiện nay theo các cách sau:

giải pháp (A). Nhiều người nấu, mọi người nấu một món, chế biến nguyên vật liệu và gia vị riêng biệt, thực hiện trong căn bếp riêng; biện pháp (B). Không ít người nấu, mỗi người nấu một món, cơ mà chế biến nguyên liệu và gia vị chung, vào một nhà bếp chung; bí quyết (C). Một fan nấu những món thuộc lúc, chế biến nguyên vật liệu và hương liệu gia vị chung, trong một căn bếp; bí quyết (D). Một người nấu nhiều món, mỗi thời khắc chỉ nấu bếp một món, nấu chấm dứt món này mới tiến hành món khác.

*

Nếu họ tương ứng:

tín đồ nấu (đầu bếp) với lịch trình phần mềm; nấu nướng một món ăn tương ứng với một trách nhiệm cần xử lý; vật liệu và gia vị khớp ứng với dữ liệu (Tệp, liên kết mạng, …); nhà bếp tương ứng với laptop hoặc bộ xử lý.

Ta đang thấy tất cả sự tương đương giữa các cách thức tổ chức quy trình xử lý tài liệu trong lập trình sẵn với cách thức tổ chức nấu ăn uống cho một bữa ăn. Thiệt vậy, giải pháp (A) khớp ứng với việc áp dụng nhiều chương trình, mỗi chương trình chạy xe trên nhiều máy vi tính hoặc cpu khác nhau, thực hiện dữ liệu bóc biệt (có thể trùng lặp) để tiến hành riêng nhiệm vụ được giao. Vào lập trình, đây đó là Tính toán tuy nhiên song (Parallel Computing) theo mô hình MPMD (Multiple Program, Multiple Data).

Cách (B) khớp ứng với cách tổ chức triển khai xử lý bằng cách sử dụng nhiều chương trình, từng chương trình cách xử trí một nhiệm vụ, tất cả chương trình thực hiện chung dữ liệu trên và một máy tính. Quy mô này chính là mô hình hệ điều hành quản lý đa nhiệm (Multitask Operating System) như Windows, Linux, MacOS mà bọn họ đã quen thuộc thuộc.

Xem thêm: " Lãnh Sự Quán Tiếng Anh Là Gì ? Lãnh Sự Quán (Consulate) Là Gì?

Cách (C) khớp ứng với đo lường đồng thời, trong những số ấy một chương trình giải pháp xử lý nhiều trọng trách đồng thời theo cách chia bé dại từng nhiệm vụ thành các thao tác, thực hiện các làm việc (không phân biệt của nhiệm vụ nào) xen kẹt nhau vào khoảng thời gian được phân chia hợp lý. Khái niệm “đồng thời” không áp dụng cho từng làm việc (tương ứng với lệnh thực thi trong thứ tính), tức là không thể tiến hành các làm việc cùng một thời điểm (kiểu như bạn nấu nạp năng lượng vừa băm thịt, vừa thái hành). Ở đây, định nghĩa “đồng thời” được áp dụng cho nguyên cả nhiệm vụ, gọi theo nghĩa gồm hai hay nhiều trọng trách cùng “đang” trong quá trình được xử lý, nhưng những hành động rõ ràng thực hiện những nhiệm vụ được diễn ra xen kẽ tuần tự (nhưng không đồng thời).

*

Cách (D) tương ứng với thiết kế tuần tự, trong những số đó chương trình giải pháp xử lý tuần trường đoản cú hết trọng trách này rồi mới bước đầu xử lý trách nhiệm khác. Mỗi thời điểm chỉ bao gồm một trọng trách đang được xử lý.

Cũng với lấy ví dụ trên, bạn có thể thấy bí quyết (C) là dạng xử lý thịnh hành nhất, y hệt như hàng triệu những người dân nội trợ hàng ngày nấu ăn theo phong cách này: một bữa ăn với tương đối nhiều món ăn, áp dụng chung nhiều nguyên liệu, và có tác dụng trong khuôn viên một căn bếp trong gia đình. Và nhiều phần các bà chuyên lo việc bếp núc nấu các món ăn uống “cùng lúc” nhằm tận dụng thời gian nhàn hạ lúc mong chờ các món nạp năng lượng được nấu chín tương tự như kết hợp chuẩn bị nguyên liệu tầm thường cho những món ăn. Xem xét các làm việc nấu ăn vẫn thực hiện tuần tự với xen kẽ lẫn nhau giữa những món.

Lập trình đôi khi trong Java

Trong Java, thiết kế đồng thời được thiết kế theo phong cách theo mô hình Multithreading (xử lý đa luồng), trong những số ấy chương trình bao gồm nhiều Thread (luồng), từng Thread chạy theo quá trình thực thi lệnh của riêng biệt mình, nhưng tất cả các luồng đều có công dụng truy cập được ngẫu nhiên đối tượng với tài nguyên của chương trình. Người lập trình phải chịu trách nhiệm trong việc phân chia và phối hợp đúng đắn giữa các Thread vào việc truy vấn (đọc/ghi) các đối tượng người tiêu dùng và khoáng sản chung. Điều này tương tự như người đầu phòng bếp phân phân tách và phối hợp các thao tác làm việc chế đổi mới nấu cho những món nạp năng lượng một cách nhịp nhàng, đúng chuẩn để né nhầm lẫn vật liệu và gia vị, bên cạnh đó tận dụng được thời gian thanh nhàn của khí cụ và nhà bếp để đạt tác dụng cao nhất.

Mỗi công tác Java được chạy trên nền một sản phẩm ảo Java (Java Virtual Machine). Lắp thêm ảo Java là dạng vật dụng ảo các bước (Process Virtual Machine), vì vậy mỗi lịch trình Java là một trong tiến trình của hệ điều hành. Hàm main() trong công tác Java sẽ tạo ra Thread khoác định. Một chương trình Java dễ dàng chỉ có một Thread được tạo thành từ hàm main(). Thiết bị ảo Java chất nhận được chương trình Java hoàn toàn có thể tạo ra những Thread khác. Nếu như muốn xử lý đồng thời các nhiệm vụ, người lập trình nên viết mã lệnh để hàm main() điện thoại tư vấn đến để tạo nên các Thread khác.

Xem thêm: Đông Trùng Hạ Thảo Không Dùng Cho Đối Tượng Nào, Ai Không Nên Sử Dụng

*

Để tạo nên Thread, bạn lập trình đề nghị thực hiện quá trình sau:

Định nghĩa lớp đối tượng người dùng chứa mã lệnh xúc tiến của Thread đề xuất tạo, bằng 1 trong hai cách: a) tạo thành lớp con thừa kế trực tiếp từ lớp đối tượng java.lang.Thread; hoặc b) tạo ra lớp đối tượng thiết lập Interface java.lang.Runnable. Nạp đè (overriding) hàm run() kế thừa từ lớp java.lang.Thread hoặc giao diện java.lang.Runnable. Trong thân hàm run() viết mã lệnh cho trọng trách mà mình muốn Thread thực hiện. Bên trong hàm main (hoặc những phương thức mà hàm main() sẽ gọi đến), tạo đối tượng thể hiện (instance) của lớp Thread vừa tạo, tiếp nối gọi hàm start() nhằm kích hoạt Thread.

Chương trình lấy ví dụ minh họa được tạo thành như sau:

Lớp đối tượng người dùng SimpleThread quan niệm một Thread đối chọi giản, chỉ hiện thông báo ra màn hình cửa sổ console: