Java: Tiến trình (Progress) và Luồng (Thread)

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Người dùng máy tính coi một điều là hiển nhiên rằng máy tính của họ có thể làm nhiều việc cùng một lúc. Họ giả định rằng họ có thể tiếp tục làm việc trong trình xử lý văn bản, trong khi các ứng dụng khác tải xuống tệp, quản lý hàng đợi in và phát trực tuyến âm thanh. Ngay cả một ứng dụng duy nhất cũng thường được mong đợi làm nhiều việc cùng một lúc. Ví dụ: ứng dụng âm thanh phát trực tuyến đó phải đồng thời đọc âm thanh kỹ thuật số ngoài mạng, giải nén nó, quản lý phát lại và cập nhật màn hình của nó. Ngay cả trình xử lý văn bản cũng phải luôn sẵn sàng phản hồi các sự kiện bàn phím và chuột, cho dù nó có bận định dạng lại văn bản hay cập nhật màn hình hay không. Phần mềm có thể làm những việc như vậy được gọi là phần mềm đồng thời (concurrent).

Nền tảng Java được thiết kế từ đầu để hỗ trợ lập trình đồng thời, với hỗ trợ đồng thời cơ bản trong ngôn ngữ lập trình Java và các thư viện lớp Java. Kể từ phiên bản 5.0, nền tảng Java cũng đã bao gồm các API đồng thời cấp cao. Bài học này giới thiệu về hỗ trợ đồng thời cơ bản của nền tảng và tóm tắt một số API cấp cao trong các gói java.util.concurrent.


Trong lập trình đồng thời, có hai đơn vị thực thi cơ bản là Tiến trình (Progress) và Luồng (Thread). Trong ngôn ngữ lập trình Java, lập trình đồng thời là chủ yếu là theo luồng. Tuy nhiên, tiến trình cũng chiếm vị trí quan trọng.

Một hệ thống máy tính thông thường có rất nhiều tiến trình và luồng đang hoạt động. Điều này đúng ngay cả trong hệ thống chỉ có một lõi thực thi duy nhất, và do đó chỉ có một luồng thực sự được thực hiện tại bất kỳ thời điểm nào. Thời gian xử lý cho một lõi duy nhất được chia sẻ giữa các xử lý và luồng thông qua một tính năng hệ điều hành được gọi là cắt lát thời gian.

Hiện nay, đang trở nên ngày càng phổ biến các hệ thống máy tính có nhiều bộ xử lý hoặc xử lý với nhiều lõi thực hiện. Điều này giúp tăng cường đáng kể khả năng của hệ thống để thực hiện đồng thời các tiến trình và luồng.

Tiến trình (Process)

Mỗi tiến trình có một môi trường thực hiện khép kín. Một tiến trình nói chung có một tập hoàn chỉnh và riêng biệt tài nguyên thời gian chạy cơ bản; đặc biệt, mỗi tiến trình đều có không gian bộ nhớ riêng.

Tiến trình thường được coi là đồng nghĩa với các chương trình hoặc ứng dụng. Tuy nhiên, những gì người dùng thấy như một ứng dụng duy nhất có thể trên thực tế là một tập hợp các tiến trình hợp tác. Để tạo điều kiện giao tiếp giữa các trình trình, hầu hết các hệ điều hành hỗ trợ tài nguyên Inter Process Communication (IPC), chẳng hạn như các pipe và socket. IPC được sử dụng không chỉ cho thông tin liên lạc giữa các tiến trình trên cùng một hệ thống, mà còn xử lý trên các hệ thống khác nhau.

Hầu hết những sự thực thi của các máy ảo Java chạy như một tiến trình duy nhất. Một ứng dụng Java có thể tạo ra các quy trình bổ sung sử dụng một đối tượng ProcessBuilder.

Luồng (Thread)

Luồng đôi khi được gọi là tiến trình nhẹ. Cả tiến trình và luồng đều cung cấp một môi trường thực thi, nhưng việc tạo ra một luồng mới đòi hỏi ít tài nguyên hơn so với việc tạo ra một tiến trình mới.

Luồng tồn tại trong một tiến trình - mỗi tiến trình có ít nhất một luồng. Luồng chia sẻ tài nguyên của tiến trình, bao gồm cả bộ nhớ và tập tin mở. Điều này tạo nên tính hiệu quả, nhưng có khả năng gặp vấn đề về giao tiếp.

Thực thi đa luồng là một tính năng thiết yếu của nền tảng Java. Mỗi ứng dụng có ít nhất một luồng - hoặc một vài luồng, nếu bạn đếm số luồng "hệ thống" làm những việc như quản lý bộ nhớ và xử lý tín hiệu. Nhưng từ quan điểm của người lập trình ứng dụng, bạn nên bắt đầu với chỉ một luồng, gọi là luồng chính. Luồng chính có khả năng tạo các luồng bổ sung, ta sẽ nói đến điều này ở phần sau.

» Tiếp: Định nghĩa và khởi tạo Thread
« Trước: KIỂM TRA KIẾN THỨC JAVA NIO
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!