Là sự trừu tượng đồng thời mô phỏng các quy trình UNIX?


8

OK, tôi đã cân nhắc điều này ngày hôm nay, và tôi đã đến để hỏi ý kiến hoàn toàn chủ quan và thiên vị về nó. Nghịch lý thay, mặc dù vậy, tôi cũng không nghĩ đó là thức ăn gia súc chiến tranh. Tôi nghĩ rằng có chỗ cho cuộc trò chuyện hoàn toàn văn minh - Đó là Vim vs Emacs.

Tôi đã sử dụng rất nhiều trừu tượng đồng thời, đặc biệt là các khái niệm được xây dựng trên đầu các luồng. Có một xu hướng lớn trong số đó, cho dù đó là truyền tin nhắn, không thay đổi theo mặc định hoặc theo luồng theo mặc định hoặc các luồng khác.

Xu hướng là tất cả họ đều đảo ngược ý tưởng của các chủ đề bằng cách chia sẻ dữ liệu rõ ràng hơn là ẩn. Đó là, tất cả dữ liệu không được chia sẻ trừ khi có quy định khác, điều này trái ngược với phân luồng truyền thống được tìm thấy trong các ngôn ngữ như Java. (Tôi biết Java hỗ trợ trừu tượng đồng thời ở mức cao hơn của riêng nó.) Ví dụ: bạn rõ ràng chuyển các thông báo. Bạn nói rõ các biến nào là luồng cục bộ. Bạn nói rõ ràng các biến có thể thay đổi. Đây chỉ là một vài ví dụ được tìm thấy trong một số ngôn ngữ.

Tôi nghĩ phong cách đồng thời dễ dàng này là một khái niệm hiện đại. Tôi đã lầm. Gần đây tôi đã bắt đầu chơi xung quanh với các đồ chơi UNIX như fork () và pipe () và tôi đã bị sốc khi phát hiện ra rằng các cơ chế đồng thời rõ ràng, dễ dàng đã xuất hiện kể từ khi bắt đầu UNIX.

Có một chút gì đó lạ về nhận ra rằng C + UNIX từ những năm 70 làm đồng thời xa dễ dàng hơn nhiều cơ chế hợp thời trang ren hiện đại.

Vì vậy, đây là những gì tôi đang tự hỏi ... những trừu tượng luồng hiện đại này chỉ đơn giản là cố gắng mô phỏng các quy trình kiểu UNIX trên đầu các luồng, với tất cả các đặc điểm thám hiểm và không chia sẻ mặc định của chúng? Tôi biết rằng một số cơ chế như STM cung cấp những thứ như giao dịch kiểu DB thực sự là một giải pháp hiện đại và sáng tạo để đồng thời, nhưng hầu hết dường như là những cách mới để thực hiện những gì các lập trình viên UNIX đã làm từ lâu.

Chỉ cần nói rằng, tôi không phải là một fanboy UNIX, không phải là bất kỳ sự tưởng tượng nào. Tôi biết rằng các quy trình chậm hơn nhiều so với các luồng để khởi tạo trên nhiều nền tảng, nhưng tôi đang nói về điều này từ cơ sở khái niệm.


Một câu hỏi không tồi nhưng vấn đề của nó là: "Tôi nghĩ có chỗ cho [...] cuộc trò chuyện".

Tôi nói thêm rằng vì vậy nó không đóng cửa ngay lập tức vì chủ quan / quan điểm :) Tôi thực sự thích nghe suy nghĩ của mọi người về điều này ...

câu hỏi hay. Tôi nghĩ rằng bạn đang thiếu đối tượng lớn hơn cho câu hỏi bằng cách bỏ qua thẻ ngôn ngữ lập trình (mặc dù tôi hiểu lý do tại sao bạn làm điều đó). Bạn có thể nhận được một số phản hồi bổ sung bằng cách bao gồm một thẻ như hiệu suất, thử nghiệm hoặc đánh dấu băng ghế. Có thể có các thẻ khác mà tôi không biết điều đó sẽ mở rộng câu trả lời của bạn (bất cứ ai?). Chúc may mắn!
shellter

Tôi khuyên bạn nên xóa thẻ unix vì câu hỏi của bạn rõ ràng không bị hạn chế đối với tên miền unix. nhiều người có các hệ điều hành cụ thể trong các thẻ bỏ qua của họ (như tôi với OS-X).
Bernd Elkemann

Tôi nghĩ nhiều khả năng các khái niệm trừu tượng đồng thời đang "mô phỏng" (chính xác hơn là dựa trên) Truyền đạt lý thuyết quy trình tuần tự
gnat

Câu trả lời:


1

Quan sát tốt, chắc chắn có một xu hướng chia sẻ rõ ràng (cho dù thông qua các ngôn ngữ chức năng hoặc quy ước). Nhận xét về các quá trình chậm hơn tôi sẽ thích nghi một chút: chúng nặng hơn , nghĩa là chúng không thực hiện chậm hơn trong hiệu năng thô nhưng mọi chuyển đổi giữa chúng mất nhiều thời gian hơn so với chuyển đổi giữa các luồng. Bạn đã nhận ra rằng có một số hình thức đồng thời khác và nhận ra STM . Tôi chỉ nói thêm rằng có (ngoài chia sẻ rõ ràng và STM) còn có xu hướng phát triển theo hướng luồng (tác vụ song song; gán nhiệm vụ cho các luồng công nhân đã được khởi động trước và tái chế chúng): Chắc chắn là cách để thực hiện khôn ngoan và tò mò một cách tiếp cận khác để chia sẻ rõ ràng bởi vì các luồng được gộp chung là tất cả trong một quy trình.


Tôi đã thay đổi dòng hiệu suất cho phù hợp với những gì bạn nói. Thật thú vị, đôi khi tôi sử dụng ProcessPool trong Python, giống như gộp nhóm, ngoại trừ đó là một nhóm các quy trình, không phải các luồng. Ngay cả trên Windows nó dường như hoạt động trơn tru. Sau đó, một lần nữa tôi không thực sự căng thẳng quá nhiều. Tôi tưởng tượng rằng các nhóm quy trình là một cách gọn gàng để thực hiện đồng thời trong các ngôn ngữ với thời gian chạy không có hy vọng vào địa ngục được đa luồng bất cứ lúc nào ( ho GIL ho ).

Thật kỳ lạ khi một nhóm luồng thường sử dụng một tiến trình mặc dù - tôi đã nghĩ rằng họ sẽ chia nó thành nhiều tiến trình như có các lõi CPU.

1
@Louis: mỗi luồng có thể chạy trong một lõi khác nhau.
ninjalj

@ninjalj: Xin lỗi, một chút khoảnh khắc chết não từ tôi ở đó. Tôi đoán rằng tôi vẫn đang vô thức nghĩ về các nhóm quy trình.

Cho rằng câu trả lời này cung cấp hàng tấn thông tin, tôi sẽ đánh dấu nó là được chấp nhận. Nói một câu trả lời là 'được chấp nhận' trong một bối cảnh chủ quan cảm thấy hơi kỳ lạ, nhưng tôi cảm thấy nó hợp lý :)

2

Tôi nghĩ đó không phải là vấn đề của X mô phỏng Y, hơn là cố gắng tìm sự cân bằng.

Các quy trình hoàn toàn riêng biệt giữ cho cuộc sống tương đối đơn giản. Chúng làm cho nó khá dễ dàng để xây dựng những thứ như đường ống của các quy trình chiếm ít nhất một số lợi thế của nhiều bộ xử lý. Cũng có một số nhược điểm khá rõ ràng - đặc biệt là thiếu linh hoạt và khá nhiều chi phí.

Một quy trình duy nhất với nhiều luồng thực hiện chia sẻ về cơ bản tất cả các tài nguyên về cơ bản đảo ngược các yếu tố đó: chi phí thấp hơn và tính linh hoạt cao, với chi phí khó thiết kế hơn và / hoặc giữ ổn định.

Đối với hầu hết các phần, điều xảy ra là mọi người đang làm việc để tìm ra một nền tảng trung gian cung cấp gần như tính linh hoạt và tốc độ của các luồng, với thiết kế đơn giản hơn và kết quả ổn định hơn của các quy trình riêng biệt (và, tôi nghĩ rằng họ phần lớn đang thành công, để ít nhất là một mức độ nào đó).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.