Hiểu và sử dụng Thread Pool trong Java

Việc tạo quá nhiều luồng (thread) có thể gây ra chi phí điều phối lớn, ảnh hưởng đến hiệu suất tổng thể và tính cục bộ của bộ nhớ đệm. Thread pool giúp khắc phục vấn đề này bằng cách khởi tạo sẵn một tập hợp các luồng, sẵn sàng nhận và thực thi tác vụ khi được CPU phân bổ. Sau khi hoàn thành công việc, các luồng này quay trở lại "hồ chứa" để ch ...

Đăng vào ngày 13 tháng 6 lúc 00:10

Xử Lý Tác Vụ Trả Về Kết Quả Với CompletableFuture.supplyAsync Trong Java

Khái Niệm Cốt Lõi Khi làm việc với môi trường đa luồng trong Java, phương thức CompletableFuture.supplyAsync đóng vai trò quan trọng trong việc thực thi các tác vụ không chặn và trả về giá trị. Khác với runAsync chỉ thực hiện hành động mà không nhận kết quả, supplyAsync chấp nhận một hàm supplier để tính toán và trả về đối tượng CompletableFutu ...

Đăng vào ngày 12 tháng 6 lúc 07:57

Giới hạn số lượng thread tối đa của một process trong hệ điều hành Linux

Phân bổ không gian địa chỉ ảo Trong hệ điều hành Linux, không gian địa chỉ ảo được chia thành hai phần chính: Kernel Space (không gian nhân) và User Space (không gian người dùng). Tùy thuộc vào kiến trúc của CPU là 32-bit hay 64-bit mà kích thước của các vùng này sẽ khác nhau: Hệ thống 32-bit: Tổng không gian địa chỉ ảo là 4 GB. Thông thư ...

Đăng vào ngày 12 tháng 6 lúc 00:22

Hiệu suất cao trong C++: Lập trình đa luồng với C++11 và quản lý đồng bộ

Khái niệm cơ bản về luồng và tiến trình Trong lập trình hệ thống, việc phân biệt giữa tiến trình (process) và luồng (thread) là nền tảng để xây dựng các ứng dụng hiệu năng cao. Một tiến trình có thể hiểu như một chương trình đang chạy, sở hữu không gian bộ nhớ riêng biệt, bao gồm mã lệnh, dữ liệu, ngăn xếp và tài nguyên hệ thống. Trong khi đó, ...

Đăng vào ngày 11 tháng 6 lúc 06:15

Luồng trong Hệ Thống Linux: Tạo, Quản Lý và Ứng Dụng

Ưu điểm của Luồng Luồng tiết kiệm tài nguyên hơn so với đa tiến trình, cho phép chia sẻ biến và tài nguyên tiến trình. Khái niệm Luồng Luồng là tiến trình nhẹ, thường đại diện cho nhiều tác vụ trong một tiến trình. Tiến trình là đơn vị phân phối tài nguyên nhỏ nhất, trong khi luồng là đơn vị thực thi nhỏ nhất. Đặc điểm Luồng Chia sẻ tài nguy ...

Đăng vào ngày 6 tháng 6 lúc 02:42

Linux: Hiện tượng chết cứng, khóa đọc viết và khóa quay

Hiện tượng chết cứng 1.1 Định nghĩa Hiện tượng chết cứng xảy ra khi một nhóm tiến trình mỗi tiến trình đều giữ tài nguyên mà không giải phóng, nhưng lại yêu cầu tài nguyên từ các tiến trình khác đang chiếm giữ và không thả ra. Điều này dẫn đến trạng thái chờ đợi vô hạn. 1.2 Bốn điều kiện cần thiết để xảy ra hiện tượng chết cứng Điều kiện loạ ...

Đăng vào ngày 2 tháng 6 lúc 20:57

Vấn đề an toàn luồng qua ví dụ bán vé

Khi học về lập trình đa luồng, một trong những ví dụ kinh điển để minh họa vấn đề an toàn luồng chính là bán vé. Qua tình huống này, ta có thể hiểu rõ hơn về điều kiện phát sinh và cách giải quyết vấn đề an toàn luồng. Tình huống minh họa Trường hợp 1: Chỉ có một quầy bán vé duy nhất cho 100 vé. Vì chỉ có một luồng xử lý, nên không xảy ra ...

Đăng vào ngày 1 tháng 6 lúc 23:14

Sử dụng Async và Await trong C#

Trong lập trình hiện đại, việc xử lý các tác vụ bất đồng bộ là một yêu cầu thiết yếu để đảm bảo hiệu suất ứng dụng. C# cung cấp hai từ khóa quan trọng là async và await để đơn giản hóa quá trình lập trình bất đồng bộ. Ví dụ minh họa cơ bản Dưới đây là một đoạn mã mẫu thể hiện cách sử dụng các từ khóa này: // Quan trọng: async và await luôn đi k ...

Đăng vào ngày 1 tháng 6 lúc 10:14

Giao tiếp giữa các luồng trong Java

Giao tiếp giữa các luồng Trong bài toán sản xuất - tiêu thụ, hai luồng (sản xuất và tiêu thụ) cùng truy cập một tài nguyên chung và phụ thuộc lẫn nhau. Cụ thể: Luồng sản xuất phải thông báo cho luồng tiêu thụ khi có dữ liệu mới. Luồng tiêu thụ sau khi xử lý xong cần báo hiệu để luồng sản xuất tiếp tục tạo dữ liệu. Từ khóa synchronized g ...

Đăng vào ngày 30 tháng 5 lúc 10:28

Xử Lý Các Vấn Đề Không An Toàn Khi Đồng Bộ Hóa Luồng Trong Java

Vấn Đề Cốt Lõi Của Đa Luồng Khi phát triển ứng dụng sử dụng công nghệ đa luồng, thách thức lớn nhất nằm ở việc quản lý các tác vụ truy cập hoặc thay đổi cùng một đối tượng dữ liệu đồng thời (hay còn gọi là xung đột tài nguyên). Để giải quyết tình trạng này, lập trình viên cần áp dụng cơ chế đồng bộ hóa. Nguyên lý của đồng bộ hóa luồng hoạt độn ...

Đăng vào ngày 29 tháng 5 lúc 06:30