Câu hỏi Sự khác biệt giữa một quá trình và một chủ đề là gì?


Sự khác biệt về mặt kỹ thuật giữa quy trình và chuỗi là gì?

Tôi có cảm giác một từ như 'quy trình' bị lạm dụng và cũng có các chủ đề phần cứng và phần mềm. Làm thế nào về quy trình trọng lượng nhẹ trong các ngôn ngữ như Erlang? Có lý do dứt khoát nào để sử dụng một thuật ngữ trong một thuật ngữ khác không?


1231
2017-10-14 09:13


gốc


Liên quan: stackoverflow.com/questions/32294367/… - zxq9


Các câu trả lời:


Cả hai quy trình và luồng là các chuỗi thực hiện độc lập. Sự khác biệt điển hình là các luồng (của cùng một tiến trình) chạy trong một không gian bộ nhớ chia sẻ, trong khi các tiến trình chạy trong các không gian bộ nhớ riêng biệt.

Tôi không chắc chắn những gì "phần cứng" vs "phần mềm" chủ đề bạn có thể được đề cập đến. Các luồng là một tính năng môi trường hoạt động, chứ không phải là một tính năng của CPU (mặc dù CPU thường có các hoạt động tạo ra các luồng hiệu quả).

Erlang sử dụng thuật ngữ "process" vì nó không đưa ra một mô hình lập trình đa bộ nhớ chia sẻ. Gọi họ là "chủ đề" sẽ ngụ ý rằng họ đã chia sẻ bộ nhớ.


1116
2017-10-14 09:15



Nó có thể là một tham chiếu đến HyperThreading (tm)? - RobS
Chủ đề phần cứng có thể đề cập đến nhiều ngữ cảnh chủ đề trong lõi (ví dụ: HyperThreading, SMT, Niagara / Rock của Mặt trời). Điều này có nghĩa là các tệp đăng ký trùng lặp, các bit thừa được mang theo với lệnh thông qua các đường ống dẫn và logic chuyển tiếp / chuyển tiếp phức tạp hơn, trong số những thứ khác. - Matt J
@JeshwanthKumarNK: Tạo một chuỗi mới phân bổ ít nhất đủ bộ nhớ cho một ngăn xếp mới. Bộ nhớ này được hệ điều hành phân bổ trong quá trình A. - Greg Hewgill
Câu trả lời này có vẻ sai. Nếu cả hai quy trình và luồng là các chuỗi thực hiện độc lập, thì một quá trình có chứa hai luồng sẽ phải có ba chuỗi thực thi và điều đó không thể đúng. Chỉ một luồng là một chuỗi thực thi - một quá trình là một vùng chứa có thể chứa một hoặc nhiều chuỗi thực thi. - David Schwartz
"Chủ đề phần cứng" là các luồng được cung cấp các tài nguyên phần cứng riêng lẻ (một lõi, bộ xử lý hoặc siêu phân tách riêng). "Chủ đề phần mềm" là các chủ đề phải cạnh tranh cho cùng một sức mạnh xử lý. - jpmc26


Quá trình
Mỗi quá trình cung cấp các tài nguyên cần thiết để thực thi một chương trình. Quy trình có không gian địa chỉ ảo, mã thực thi, xử lý mở đối tượng hệ thống, ngữ cảnh bảo mật, mã định danh quá trình duy nhất, biến môi trường, lớp ưu tiên, kích thước thiết lập tối thiểu và tối đa và ít nhất một luồng thực thi. Mỗi quá trình được bắt đầu bằng một chuỗi đơn, thường được gọi là chuỗi chính, nhưng có thể tạo các chuỗi bổ sung từ bất kỳ luồng nào của nó.

Chủ đề
Một luồng là một thực thể trong một tiến trình có thể được lên lịch để thực thi. Tất cả các luồng của một tiến trình chia sẻ không gian địa chỉ ảo và tài nguyên hệ thống của nó. Ngoài ra, mỗi thread duy trì các trình xử lý ngoại lệ, ưu tiên lên lịch, lưu trữ cục bộ luồng, một định danh chuỗi duy nhất và một tập hợp các cấu trúc mà hệ thống sẽ sử dụng để lưu ngữ cảnh luồng cho đến khi nó được lên lịch. Ngữ cảnh luồng bao gồm tập hợp các thanh ghi máy, ngăn xếp hạt nhân, khối môi trường luồng và ngăn xếp người dùng trong không gian địa chỉ của tiến trình của luồng. Các chủ đề cũng có thể có ngữ cảnh bảo mật riêng, có thể được sử dụng để mạo danh các máy khách.


Tìm thấy điều này trên MSDN ở đây:
Giới thiệu về quy trình và chủ đề 

Microsoft Windows hỗ trợ đa nhiệm ưu tiên, tạo ra hiệu quả của việc thực hiện đồng thời nhiều luồng từ nhiều quy trình. Trên một máy tính đa xử lý, hệ thống có thể đồng thời thực thi nhiều luồng như có bộ vi xử lý trên máy tính.


637
2017-10-14 09:43



Đối với những người muốn biết tại sao bạn không thể định dạng đĩa mềm cùng một lúc: stackoverflow.com/questions/20708707/… - Computernerd
@LuisVasconcellos - Nếu không có chủ đề, sau đó quá trình sẽ không làm bất cứ điều gì. Quá trình này sẽ chỉ là một số mã và trạng thái chương trình được nạp vào bộ nhớ. Nó không được sử dụng nhiều. Nó giống như có một con đường không có xe đi dọc theo nó. - Scott Langham
@LuisVasconcellos - Tốt. Có, bạn có thể nghĩ về một chuỗi là thứ gì đó di chuyển qua mã của quy trình và thực hiện các hướng dẫn trong mã đó. - Scott Langham
Câu trả lời này là cách tốt hơn so với câu trả lời được chấp nhận bởi vì nó nói về lý tưởng các quy trình và chủ đề: Chúng phải là những thứ riêng biệt với các mối quan tâm riêng biệt. Thực tế là, hầu hết các hệ điều hành có lịch sử quay trở lại xa hơn so với phát minh các luồng, và do đó, trong hầu hết các hệ điều hành, những mối quan tâm đó vẫn còn bị vướng víu, ngay cả khi chúng đang dần cải thiện theo thời gian. - james large
@BKSpurgeon Với mỗi giải thích cho một, bạn phải đưa người đọc của bạn từ một mức độ hiểu biết đến cấp độ tiếp theo. Thật không may, tôi không thể điều chỉnh câu trả lời cho mọi người đọc và do đó phải giả định một mức độ kiến ​​thức. Đối với những người không biết, họ có thể thực hiện các tìm kiếm thêm về các thuật ngữ tôi sử dụng mà họ không hiểu, có thể không, cho đến khi đạt đến điểm cơ sở mà họ hiểu. Tôi sẽ đề nghị bạn đưa ra câu trả lời của riêng bạn, nhưng rất vui khi thấy bạn đã có. - Scott Langham


Quá trình:

  • Một thực thi của một chương trình được gọi là một quá trình.
  • Một số hệ điều hành sử dụng thuật ngữ ‘tác vụ’ để chỉ một chương trình đang được thực hiện.
  • Một quá trình luôn luôn được lưu trữ trong bộ nhớ chính cũng được gọi là bộ nhớ chính hoặc bộ nhớ truy cập ngẫu nhiên.
  • Do đó, một quá trình được gọi là một thực thể hoạt động. Nó biến mất nếu máy được khởi động lại.
  • Một số quy trình có thể được liên kết với cùng một chương trình.
  • Trên một hệ thống đa xử lý, nhiều tiến trình có thể được thực hiện song song.
  • Trên một hệ thống uni-processor, mặc dù song song thực sự không đạt được, một thuật toán lập lịch trình quy trình được áp dụng và bộ vi xử lý được lên kế hoạch để thực hiện từng quá trình một tại một thời điểm tạo ra một ảo giác đồng thời.
  • Thí dụ: Thực hiện nhiều phiên bản của chương trình 'Máy tính'. Mỗi trường hợp được gọi là một quá trình.

Chủ đề:

  • Một luồng là một tập con của tiến trình.
  • Nó được gọi là "quá trình nhẹ", vì nó tương tự như một quá trình thực sự nhưng thực thi trong bối cảnh của một tiến trình và chia sẻ cùng một tài nguyên được phân bổ cho quá trình bởi hạt nhân.
  • Thông thường, một quá trình chỉ có một luồng điều khiển - một bộ các lệnh máy thực hiện tại một thời điểm.
  • Một quá trình cũng có thể được tạo thành từ nhiều luồng thực thi thực thi lệnh đồng thời.
  • Nhiều luồng điều khiển có thể khai thác tính song song thực sự có thể trên các hệ thống đa xử lý.
  • Trên một hệ thống uni-processor, một thuật toán lập lịch trình thread được áp dụng và bộ vi xử lý được lên kế hoạch để chạy từng luồng một tại một thời điểm.
  • Tất cả các luồng chạy trong một tiến trình chia sẻ cùng một không gian địa chỉ, các bộ mô tả tệp, ngăn xếp và các thuộc tính liên quan đến quy trình khác.
  • Vì các luồng của một tiến trình chia sẻ cùng một bộ nhớ, việc đồng bộ hóa quyền truy cập vào dữ liệu được chia sẻ trong tiến trình đạt được tầm quan trọng chưa từng thấy.

Tôi đã mượn thông tin trên từ Kiến thức Quest! Blog.


218
2018-03-19 14:17



Kumar: Từ kiến ​​thức của tôi, các chủ đề không chia sẻ cùng một chồng. Nếu không, nó sẽ không thể chạy mã khác nhau trên mỗi người trong số họ. - Mihai Neacsu
Tôi nghĩ rằng @MihaiNeacsu là đúng. Chủ đề chia sẻ "mã, dữ liệu và tệp" và có "sổ đăng ký và ngăn xếp" của riêng chúng. Trượt từ khóa học hệ điều hành của tôi: i.imgur.com/Iq1Qprv.png - Shehaaz
Điều này khá hữu ích, vì nó mở rộng về những chủ đề và quy trình là gì và chúng có liên quan như thế nào với nhau. Tôi muốn đề nghị thêm một ví dụ của một chủ đề, đặc biệt là kể từ khi có một cho một quá trình. Đồ tốt! - Smithers
Liên kết Kquest.co.cc đã chết. - Elijah Lynn


Đầu tiên, chúng ta hãy nhìn vào khía cạnh lý thuyết. Bạn cần phải hiểu một quá trình là khái niệm để hiểu sự khác biệt giữa một quá trình và một sợi và những gì được chia sẻ giữa chúng.

Chúng tôi có phần sau từ phần 2.2.2 Mô hình chủ đề cổ điển trong Hệ điều hành hiện đại 3e bởi Tanenbaum:

Mô hình quy trình dựa trên hai khái niệm độc lập: tài nguyên   nhóm và thực hiện. Đôi khi nó rất hữu ích để tách chúng;   đây là nơi các chủ đề đến ....

Ông tiếp tục:

Một cách để xem xét quy trình là nó là một cách để   nhóm tài nguyên liên quan với nhau. Một quá trình có một không gian địa chỉ   chứa văn bản và dữ liệu chương trình, cũng như các tài nguyên khác. Những   tài nguyên có thể bao gồm các tệp đang mở, quy trình con, báo thức đang chờ xử lý,   xử lý tín hiệu, thông tin kế toán và hơn thế nữa. Bằng cách đặt chúng   với nhau trong hình thức của một quá trình, họ có thể được quản lý dễ dàng hơn.   Khái niệm khác mà quy trình có là một luồng thực thi, thường là   rút ngắn chỉ là chuỗi. Chủ đề có bộ đếm chương trình giữ   theo dõi hướng dẫn để thực hiện tiếp theo. Nó có các thanh ghi, trong đó   giữ các biến làm việc hiện tại của nó. Nó có một ngăn xếp, chứa   lịch sử thực thi, với một khung cho mỗi quy trình được gọi nhưng không   chưa trở về từ. Mặc dù một luồng phải thực thi trong một số tiến trình,   chủ đề và quy trình của nó là các khái niệm khác nhau và có thể được xử lý   riêng biệt. Các quá trình được sử dụng để nhóm các tài nguyên lại với nhau; chủ đề   là các thực thể được lên lịch để thực thi trên CPU.

Hơn nữa, anh ta cung cấp bảng sau:

Per process items             | Per thread items
------------------------------|-----------------
Address space                 | Program counter
Global variables              | Registers
Open files                    | Stack
Child processes               | State
Pending alarms                |
Signals and signal handlers   |
Accounting information        |

Hãy đối phó với -sự đa luồng phần cứng vấn đề. Về mặt cổ điển, một CPU sẽ hỗ trợ một luồng thực thi duy nhất, duy trì trạng thái của luồng thông qua một bộ đếm chương trình duy nhất và tập hợp các thanh ghi. Nhưng điều gì sẽ xảy ra nếu có một bộ nhớ cache bỏ lỡ? Phải mất một thời gian dài để lấy dữ liệu từ bộ nhớ chính, và trong khi đó đang xảy ra CPU chỉ là ngồi ở đó nhàn rỗi. Vì vậy, ai đó có ý tưởng về cơ bản có hai bộ trạng thái luồng (PC + đăng ký) sao cho một luồng khác (có thể trong cùng một quy trình, có thể trong một quy trình khác) có thể hoàn thành công việc trong khi luồng kia đang chờ trên bộ nhớ chính. Có nhiều tên và triển khai của khái niệm này, chẳng hạn như HyperThreading và Đồng thời đa luồng (SMT cho ngắn).

Bây giờ chúng ta hãy nhìn vào phía phần mềm. Về cơ bản có ba cách mà các luồng có thể được thực hiện ở phía phần mềm.

  1. Chủ đề không gian người dùng
  2. Chủ đề Kernel
  3. Sự kết hợp của cả hai

Tất cả những gì bạn cần để thực hiện các luồng là khả năng lưu trạng thái CPU và duy trì nhiều ngăn xếp, có thể trong nhiều trường hợp được thực hiện trong không gian người dùng. Ưu điểm của các luồng không gian người dùng là chuyển đổi chuỗi siêu nhanh vì bạn không phải bẫy vào hạt nhân và khả năng lên lịch các chuỗi của bạn theo cách bạn muốn. Hạn chế lớn nhất là không có khả năng chặn I / O (sẽ chặn toàn bộ quá trình và tất cả các luồng của người dùng), đó là một trong những lý do chính chúng tôi sử dụng các luồng ở vị trí đầu tiên. Chặn I / O bằng cách sử dụng các chủ đề rất đơn giản hóa thiết kế chương trình trong nhiều trường hợp.

Luồng hạt nhân có lợi thế là có thể sử dụng chặn I / O, ngoài việc để lại tất cả các vấn đề lên lịch cho hệ điều hành. Nhưng mỗi công tắc chủ đề yêu cầu bẫy vào hạt nhân có khả năng tương đối chậm. Tuy nhiên, nếu bạn đang chuyển đổi chủ đề vì bị chặn I / O, đây thực sự không phải là vấn đề vì hoạt động I / O có thể đã bẫy bạn vào hạt nhân.

Một cách tiếp cận khác là kết hợp cả hai, với nhiều luồng kernel có nhiều luồng người dùng.

Vì vậy, trở lại với câu hỏi của thuật ngữ, bạn có thể thấy rằng một quá trình và một chuỗi thực hiện là hai khái niệm khác nhau và lựa chọn của bạn trong đó thuật ngữ sử dụng phụ thuộc vào những gì bạn đang nói về. Về thuật ngữ "quy trình trọng lượng nhẹ", tôi không đích thân nhìn thấy điểm trong đó vì nó không thực sự truyền đạt những gì đang xảy ra cũng như thuật ngữ "chuỗi thực hiện".


90
2017-10-22 12:42



Câu trả lời nổi bật! Nó phá vỡ rất nhiều biệt ngữ và giả định. Điều đó làm cho dòng này nổi bật là khó xử, mặc dù: "Vì vậy, ai đó đã có ý tưởng về cơ bản có hai bộ trạng thái luồng (PC + sổ đăng ký)" - PC "" được gọi ở đây là gì? - Smithers
@Smithers PC là bộ đếm chương trình hoặc con trỏ chỉ dẫn, cung cấp địa chỉ của lệnh tiếp theo sẽ được thực thi: en.wikipedia.org/wiki/Program_counter - Robert S. Barnes
Tôi thấy những gì bạn đã làm ở đó. stackoverflow.com/questions/1762418/process-vs-thread/… - Alexander Gonchiy
Tại sao "Stack" không được liệt kê trong "Per process items"? Cả hai quy trình và luồng đều có ngăn xếp của riêng chúng. - stackoverflowuser2010
@ stackoverflowuser2010 không chỉ chủ đề có ngăn xếp. Những gì bạn gọi là một quá trình là một quá trình với một thread duy nhất của thực hiện và nó là thread có stack không phải là quá trình. - Robert S. Barnes


Để giải thích thêm về việc lập trình đồng thời

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

  2. Các 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. Chủ đề chia sẻ tài nguyên của quy trình, bao gồm cả bộ nhớ và tệp mở. Điều này làm cho giao tiếp hiệu quả, nhưng có khả năng có vấn đề.

Giữ người bình thường trong tâm trí,

Trên máy tính của bạn, mở Microsoft Word và trình duyệt web. Chúng tôi gọi đây là hai quy trình.

Trong Microsoft word, bạn gõ một số thứ và nó sẽ được lưu tự động. Bây giờ, bạn đã có thể quan sát việc chỉnh sửa và tiết kiệm xảy ra song song - chỉnh sửa trên một luồng và lưu trên luồng khác.


58
2017-12-24 07:04



Câu trả lời nổi bật, nó giữ mọi thứ đơn giản và cung cấp một ví dụ mọi người dùng thậm chí xem câu hỏi có thể liên quan đến. - Smithers
chỉnh sửa / tiết kiệm là một ví dụ tốt đẹp cho nhiều chủ đề bên trong một quá trình!


Một ứng dụng bao gồm một hoặc nhiều quy trình. Một quy trình, trong điều kiện đơn giản nhất, là một chương trình thực hiện. Một hoặc nhiều luồng chạy trong ngữ cảnh của tiến trình. Một luồng là đơn vị cơ bản mà hệ điều hành phân bổ thời gian xử lý. Một luồng có thể thực hiện bất kỳ phần nào của mã quá trình, kể cả các phần hiện đang được thực thi bởi một luồng khác. Một sợi là một đơn vị thực hiện phải được ứng dụng lập lịch thủ công. Các sợi chạy trong ngữ cảnh của các chuỗi sắp xếp chúng.

Bị đánh cắp từ đây.


40
2017-10-14 09:16



Trên các hệ điều hành khác, chẳng hạn như Linux, không có sự khác biệt thực tế giữa hai hệ điều hành ở cấp hệ điều hành, ngoại trừ các luồng đó thường chia sẻ cùng một không gian bộ nhớ như là tiến trình cha. (Do đó, nhược điểm của tôi) - Arafangion
Câu trả lời tốt (đặc biệt là với tín dụng), vì nó cho thấy mối quan hệ giữa hai và phân biệt thành một "câu hỏi tiếp theo" dễ dàng mong đợi (về sợi). - Smithers


Quy trình là một bộ sưu tập mã, bộ nhớ, dữ liệu và các tài nguyên khác. Một chuỗi là một chuỗi mã được thực hiện trong phạm vi của quy trình. Bạn có thể (thường) có nhiều luồng thực hiện đồng thời trong cùng một quá trình.


22
2017-10-14 09:30





  • Mỗi tiến trình là một luồng (chuỗi chính).
  • Nhưng mỗi luồng không phải là một quá trình. Nó là một phần (thực thể) của một quá trình.

21
2017-08-09 20:28



Bạn có thể giải thích thêm một chút và / hoặc bao gồm một số bằng chứng? - Zim84
Vì vậy, không có quá trình không chứa thread, phải không? - PeerNet


Một tiến trình là một thể hiện thực thi của một ứng dụng. Điều đó nghĩa là gì? Ví dụ, khi bạn bấm đúp vào biểu tượng Microsoft Word, bạn bắt đầu một tiến trình chạy Word. Một luồng là một đường dẫn thực hiện trong một tiến trình. Ngoài ra, một quá trình có thể chứa nhiều luồng. Khi bạn khởi động Word, hệ điều hành sẽ tạo một tiến trình và bắt đầu thực hiện luồng chính của quá trình đó.

Điều quan trọng cần lưu ý là một chuỗi có thể thực hiện bất kỳ điều gì mà quy trình có thể thực hiện. Nhưng vì một quá trình có thể bao gồm nhiều luồng, một luồng có thể được coi là một quy trình 'nhẹ'. Do đó, sự khác biệt cần thiết giữa một luồng và một tiến trình là công việc mà mỗi cái được sử dụng để thực hiện. Các chủ đề được sử dụng cho các tác vụ nhỏ, trong khi các quy trình được sử dụng cho các nhiệm vụ ‘nặng ký’ hơn - về cơ bản là việc thực hiện các ứng dụng.

Một sự khác biệt giữa một luồng và một tiến trình là các luồng trong cùng một tiến trình chia sẻ cùng một không gian địa chỉ, trong khi các tiến trình khác nhau thì không. Điều này cho phép các luồng đọc và ghi vào cùng các cấu trúc dữ liệu và các biến, và cũng tạo điều kiện cho giao tiếp giữa các luồng. Giao tiếp giữa các quy trình - còn được gọi là IPC hoặc liên lạc giữa các quá trình - khá khó khăn và tốn nhiều tài nguyên.


17
2018-03-14 05:09



Nó có thể là một ý tưởng tốt để thêm vào lời giải thích này tại bất kỳ thời điểm nào, CPU sẽ xử lý một tiến trình / luồng đơn. Và kể từ khi một CPU nhanh chóng chuyển từ một luồng / quá trình này sang một chuỗi khác / quá trình khác, điều này cho phép xuất hiện / ảo ảnh / ảnh hưởng của hoạt động đồng thời - Casey Flynn
"Các chủ đề được sử dụng cho các nhiệm vụ nhỏ, trong khi các quy trình được sử dụng cho các nhiệm vụ" nặng ký "hơn - về cơ bản là việc thực hiện các ứng dụng." - bạn sai vì quá trình không có thời gian xử lý nên nó không chạy mã. Chỉ chạy chuỗi - Konstantins Bogdanovs