2016-10-15 12 views
5

Gần đây tôi đang sử dụng boost :: asio library và có câu hỏi về các hàm async_ * đó.Có phải những hàm async_ * đó là boost :: asio lib được thực hiện song song bởi OS

Nói tôi gọi nhiều boost::asio::async_write() liên tiếp, là nó có thể rằng những async_write() chức năng thực hiện song song bởi hệ điều hành cơ bản ngay cả khi io_service được điều hành đơn threadedly

Cảm ơn!

Trả lời

5

là nó có thể rằng những async_write() chức năng thực hiện song song bởi hệ điều hành cơ bản

Vâng, họ đang có!
Có hai loại hành động không đồng bộ, nhiệm vụ ràng buộc CPU và nhiệm vụ ràng buộc IO.

nhiệm vụ CPU-bound là nhiệm vụ có liên quan đến chỉ CPU-thực hiện, như tính toán, đọc và ghi dữ liệu vào RAM vv

nhiệm vụ IO-ràng buộc là công việc mà liên quan đến việc đọc và viết vào các thiết bị, giống như Đĩa cứng (tập tin IO), card mạng (mạng IO), v.v.

Để thực hiện không đồng bộ các nhiệm vụ CPU, bạn cần nhiều luồng nhưng IO khác nhau. IO không đồng bộ không sử dụng các luồng song song, nó chỉ xếp hàng một yêu cầu tới thiết bị có liên quan (Hard-disk, card mạng, vv) và chuyển sang thực thi một mã khác, mà không chờ IO kết thúc.

Vì vậy, có, không đồng bộ IO (nhất định, ví dụ, bằng cách tăng Như ynchronous IO) vẫn sẽ làm việc song song ngay cả khi không nhiều chủ đề.

+3

Chỉ cần cẩn thận khi gọi hàm ['async_' trên một đối tượng nhiều lần] (http://stackoverflow.com/questions/24998899/what-socket-send-recv-operations-can-run-concurrently- sử dụng-tăng-asio). –

Các vấn đề liên quan