2010-03-20 28 views

Trả lời

73

Ngã ba mang đến cho bạn một quy trình hoàn toàn mới, đây là một bản sao của quy trình hiện tại, với cùng phân đoạn mã. Khi hình ảnh bộ nhớ thay đổi (thường là do hành vi khác nhau của hai quy trình), bạn sẽ có được sự tách biệt của hình ảnh bộ nhớ (Copy On Write), tuy nhiên mã thực thi vẫn giữ nguyên. Các tác vụ không chia sẻ bộ nhớ trừ khi chúng sử dụng một số nguyên thủy Inter Process Communication (IPC).

Một quy trình có thể có nhiều luồng, mỗi luồng thực thi song song trong cùng một ngữ cảnh của quy trình. Bộ nhớ và các tài nguyên khác được chia sẻ giữa các luồng, do đó dữ liệu chia sẻ phải được truy cập thông qua một số đối tượng nguyên thủy và đồng bộ hóa (như mutexes, condition variablessemaphores) cho phép bạn tránh tham nhũng dữ liệu.

+3

Bạn có thể muốn tham khảo "bản sao của quy trình hiện tại" như một quy trình con. –

+1

Tuy nhiên, phân đoạn văn bản thường được chia sẻ (hầu như) và thậm chí phân đoạn dữ liệu có thể được sao chép trên ghi. – Xailor

+0

Xác định chủ đề bằng chuỗi không phải là ý hay ... – nbro

26

Câu trả lời của Dacav thật tuyệt vời, tôi chỉ muốn thêm rằng không phải tất cả các mô hình luồng đều cung cấp cho bạn đa xử lý thực sự.

Ví dụ, triển khai luồng mặc định của Ruby không sử dụng chuỗi hệ điều hành/hạt nhân thực sự. Thay vào đó, nó bắt chước có nhiều luồng bằng cách chuyển đổi giữa các đối tượng Thread trong một luồng/tiến trình nhân đơn.

Điều này rất quan trọng đối với các hệ thống đa xử lý/đa lõi, bởi vì các loại chủ đề nhẹ này chỉ có thể chạy trên một lõi đơn - bạn không nhận được nhiều lợi ích từ việc có nhiều luồng.

Nơi khác tạo sự khác biệt này là khi một chuỗi chặn (chờ I/O hoặc gọi IOCTL của trình điều khiển), tất cả khối Chủ đề.

Điều này không phổ biến hiện nay - hầu hết các triển khai luồng đều sử dụng các chuỗi hạt nhân không gặp phải những vấn đề này - nhưng giá trị của nó là tinh thần cho sự hoàn chỉnh.

Ngược lại, ngã ba cung cấp cho bạn một quy trình khác có thể chạy đồng thời trên một CPU vật lý khác trong khi quá trình gốc đang thực thi. Một số người tìm thấy IPC phù hợp hơn cho ứng dụng của họ, những người khác thích luồng.

Chúc may mắn và vui chơi! Đa luồng là cả hai thách thức và bổ ích.

+6

+1 để đánh một dây thần kinh: "không phải tất cả luồng đều cung cấp cho bạn sự đa xử lý thực sự " – Dacav

+0

ruby> = 2.0 hỗ trợ các chuỗi hệ điều hành/hạt nhân. –

5

Chủ đề là các hàm chạy song song, ngã ba là một quy trình mới với kế thừa cha mẹ. Chủ đề là tốt để thực hiện một nhiệm vụ song song, trong khi nhánh là quá trình độc lập, cũng đang chạy đồng thời. Chủ đề có điều kiện chủng tộc và có kiểm soát các ẩn dụ và khóa hoặc mutexes, ống có thể được sử dụng trong ngã ba và sợi.

63

Fork:

Fork là gì, nhưng một quá trình mới mà trông giống hệt như cũ hoặc quá trình cha mẹ nhưng vẫn còn đó là một quá trình khác nhau với ID quá trình khác nhau và có bộ nhớ riêng của nó. Quá trình phụ huynh tạo ra một không gian địa chỉ riêng cho trẻ. Cả quá trình cha và con đều có cùng phân đoạn mã, nhưng thực thi độc lập với nhau.

Ví dụ đơn giản nhất của forking là khi bạn chạy lệnh trên trình bao trong unix/linux. Mỗi khi người dùng đưa ra một lệnh, trình bao sẽ hỗ trợ một tiến trình con và nhiệm vụ được thực hiện.

Khi cuộc gọi hệ thống ngã ba được phát hành, bản sao của tất cả các trang tương ứng với quy trình cha được tạo, được tải vào một vị trí bộ nhớ riêng biệt bởi hệ điều hành cho quá trình con, nhưng trong một số trường hợp, điều này là không cần thiết.Giống như trong các cuộc gọi hệ thống 'exec', không cần phải sao chép các trang quy trình cha, vì execv thay thế không gian địa chỉ của chính quá trình cha.

Vài điều cần lưu ý về forking là:

  • Quá trình con sẽ có nó độc đáo riêng quá trình ID.
  • Quy trình con sẽ có bản sao mô tả tệp của phụ huynh.
  • Khóa tệp được đặt bởi quá trình cha mẹ sẽ không được kế thừa bởi quá trình con.
  • Bất kỳ ẩn dụ nào đang mở trong quá trình cha mẹ cũng sẽ được mở trong quy trình con.
  • Quy trình con sẽ có bản sao mô tả hàng đợi tin nhắn riêng của cha mẹ.
  • Trẻ sẽ có không gian địa chỉ và bộ nhớ riêng.

Chủ đề:

Chủ đề là Processes Trọng lượng nhẹ (LWPs). Theo truyền thống, một luồng chỉ là một trạng thái CPU (và một số trạng thái tối thiểu khác) với quá trình chứa các dữ liệu còn lại (dữ liệu, ngăn xếp, I/O,). Chủ đề yêu cầu ít chi phí hơn "forking" hoặc sinh ra một quá trình mới bởi vì hệ thống không khởi tạo một không gian bộ nhớ ảo và môi trường hệ thống mới cho quá trình này. Trong khi hiệu quả nhất trên một hệ thống đa xử lý, nơi có thể lên lịch trình chạy trên một bộ xử lý khác, do đó đạt được tốc độ thông qua xử lý song song hoặc phân tán, lợi ích cũng được tìm thấy trên các hệ thống uniprocessor khai thác độ trễ trong I/O và các chức năng hệ thống khác. chấp hành.

Chủ đề trong phần trình tương tự:

  • hướng dẫn Quy trình
  • Hầu hết các dữ liệu
  • mở file (mô tả)
  • tín hiệu và xử lý tín hiệu
  • thư mục làm việc hiện tại
  • người dùng và id nhóm

Chi tiết khác có thể được tìm thấy here.

+0

Quá trình có thể có một số chủ đề. Nếu một trong các luồng trong quá trình gọi là ngã ba, quy trình chia hai có bộ nhớ hoàn toàn trùng lặp hay không, nhưng chỉ có chuỗi đang gọi là trong tiến trình mới? – Michael

+0

Trả lời: CÓ https://stackoverflow.com/questions/10080811/what-happens-to-other-threads-when-one-thread-forks – Michael

4
  1. Chủ đề chia sẻ không gian địa chỉ của quá trình đã tạo; quy trình có địa chỉ riêng của họ không gian.
  2. Chủ đề có quyền truy cập trực tiếp vào phân đoạn dữ liệu của quy trình; quy trình có bản sao riêng của họ là phân đoạn dữ liệu của quy trình gốc.
  3. Chủ đề có thể giao tiếp trực tiếp với các chủ đề khác của quy trình của nó; các quy trình phải sử dụng thông tin liên lạc interprocess để giao tiếp với các quy trình anh chị em.
  4. Chủ đề hầu như không có phí; quy trình có chi phí đáng kể.
  5. Chủ đề mới dễ dàng được tạo; quy trình mới yêu cầu trùng lặp quy trình gốc.
  6. Chủ đề có thể thực hiện kiểm soát đáng kể đối với các luồng của cùng một quy trình; quy trình chỉ có thể kiểm soát tập thể dục đối với các quy trình con.
  7. Thay đổi chủ đề chính (hủy, thay đổi ưu tiên, v.v.) có thể ảnh hưởng đến hành vi của các chủ đề khác khác của quy trình; thay đổi đối với quy trình gốc không ảnh hưởng đến quy trình con
Các vấn đề liên quan