Một chủ đề của người Viking là gì (thực sự)?


236

Tôi đã cố gắng tìm một định nghĩa tốt và hiểu được chủ đề thực sự là gì.

Có vẻ như tôi phải thiếu một cái gì đó rõ ràng, nhưng mỗi khi tôi đọc về một chủ đề là gì, nó gần như là một định nghĩa tròn, một "chủ đề là một chủ đề thực thi" hoặc "một cách để phân chia thành các tác vụ đang chạy". Ừm Huh?

Dường như từ những gì tôi đã đọc được rằng một chủ đề không thực sự là một cái gì đó cụ thể, giống như một quá trình. Thực tế nó chỉ là một khái niệm. Từ những gì tôi hiểu về cách thức hoạt động của nó, một bộ xử lý thực thi một số lệnh cho một chương trình (được gọi là luồng xử lý ), sau đó khi nó cần chuyển sang xử lý một số chương trình khác một chút, nó sẽ lưu trữ trạng thái của chương trình hiện đang thực thi cho một nơi nào đó (Thread Local Storage) và sau đó bắt đầu thực hiện các hướng dẫn của chương trình khác. Và qua lại. Như vậy, một luồng thực sự chỉ là một khái niệm cho "một trong những đường dẫn thực thi" của một chương trình hiện đang chạy.

Không giống như một quá trình, thực sự là một cái gì đó - đó là một tập hợp các nguồn lực, v.v.

Như một ví dụ về định nghĩa không thực sự giúp tôi nhiều. . .

Từ Wikipedia :

"Một luồng trong khoa học máy tính là viết tắt của một luồng thực thi. Các luồng là một cách để một chương trình tự phân chia (gọi là" split ") thành hai hoặc nhiều tác vụ chạy đồng thời (hoặc giả đồng thời). Các luồng và quy trình khác nhau từ một hệ điều hành khác, nhưng nói chung, một luồng được chứa trong một tiến trình và các luồng khác nhau trong cùng một tiến trình chia sẻ cùng một tài nguyên trong khi các tiến trình khác nhau trong cùng một hệ điều hành đa nhiệm thì không. "

Vậy tôi có đúng không? Sai lầm? Một chủ đề thực sự là gì?

Chỉnh sửa: Rõ ràng một luồng cũng được đưa ra ngăn xếp cuộc gọi của riêng nó, vì vậy đó là một phần của một điều cụ thể .


6
"Quá trình" không kém một thuật ngữ trừu tượng.
hobbs

Là lưu trữ cục bộ chủ đề chỉ là ngăn xếp cuộc gọi cho chủ đề?
committedandroider


3
Các câu trả lời dưới đây là ... trừu tượng. Nói một cách đơn giản hơn (và che đậy một số chi tiết): ngày xưa, một chương trình máy tính chỉ có thể làm một việc một lúc. Vì vậy, nó đã làm A, sau đó B, sau đó C, sau đó .... Trong các hệ thống hiện đại, điều này không lý tưởng; ví dụ bạn muốn tiếp tục duyệt web trong khi tải xuống một tệp. Vì vậy, các chương trình hiện có một hoặc nhiều "chủ đề". Mỗi "luồng" chỉ có thể làm một việc cùng một lúc, nhưng các luồng khác nhau có thể thực hiện đồng thời . Chủ đề 1 có thể làm A, sau đó B, sau đó C; luồng 2 có thể làm X, rồi Y, rồi Z. B không thể bắt đầu cho đến khi A kết thúc, nhưng A và X có thể xảy ra cùng một lúc.
Mohan

@Mohan thật tuyệt nhưng nó khác với một quá trình như thế nào?
eric

Câu trả lời:


152

Một luồng là một tập hợp các giá trị độc lập cho các thanh ghi bộ xử lý (đối với một lõi đơn). Vì điều này bao gồm Con trỏ lệnh (còn gọi là Bộ đếm chương trình), nó kiểm soát những gì thực thi theo thứ tự. Nó cũng bao gồm Con trỏ ngăn xếp, có điểm tốt hơn đến một vùng bộ nhớ duy nhất cho mỗi luồng nếu không chúng sẽ can thiệp lẫn nhau.

Các luồng là đơn vị phần mềm bị ảnh hưởng bởi luồng điều khiển (lệnh gọi hàm, vòng lặp, goto), bởi vì các lệnh đó hoạt động trên Con trỏ lệnh và thuộc về một luồng cụ thể. Các luồng thường được lên lịch theo một số sơ đồ ưu tiên (mặc dù có thể thiết kế một hệ thống với một luồng trên mỗi lõi của bộ xử lý, trong trường hợp đó, mọi luồng luôn chạy và không cần lập lịch).

Trong thực tế, giá trị của Con trỏ lệnh và lệnh được lưu trữ tại vị trí đó là đủ để xác định giá trị mới cho Con trỏ lệnh. Đối với hầu hết các hướng dẫn, điều này chỉ đơn giản là tiến bộ IP theo kích thước của hướng dẫn, nhưng hướng dẫn luồng điều khiển thay đổi IP theo những cách khác, có thể dự đoán được. Chuỗi các giá trị mà IP thực hiện tạo thành một đường dẫn thực thi được dệt thông qua mã chương trình, tạo ra tên "luồng".


10
+1. Một luồng không có gì "cụ thể" hơn một tập hợp các giá trị đăng ký.
Greg Hewgill

6
"Tập hợp các giá trị" là gì? Họ là ai? Làm thế nào để họ xác định một chủ đề ?
Richard

20
@Richard: Danh sách chính xác các thanh ghi CPU phụ thuộc vào kiến ​​trúc, nhưng con trỏ lệnh và con trỏ ngăn xếp là khá phổ biến. Chúng định nghĩa một luồng trong khi luồng này (tập hợp các giá trị thanh ghi) được tải trong lõi bộ xử lý, luồng đang chạy . Bộ xử lý đang tìm nạp các hướng dẫn theo yêu cầu của luồng và cập nhật các thanh ghi luồng. Khi cần một công tắc ngữ cảnh, bộ xử lý sẽ lưu bộ giá trị thanh ghi này vào bộ nhớ và tải một bộ thuộc về một luồng khác, thường là một phần của logic phục vụ ngắt.
Ben Voigt

4
Cảm ơn Ben. Điều đó rất hữu ích.
Richard

2
Xin chào thx @BenVoigt. Một vài điều rõ ràng mà những người như tôi có thể vấp ngã: "thanh ghi bộ xử lý" nghĩa là gì? "Con trỏ lệnh" và "con trỏ ngăn xếp" nghĩa là gì?
BKSpurgeon

214

Một luồng là một bối cảnh thực thi, đó là tất cả thông tin mà CPU cần để thực hiện một luồng hướng dẫn.

Giả sử bạn đang đọc một cuốn sách và bạn muốn nghỉ ngơi ngay bây giờ, nhưng bạn muốn có thể quay lại và tiếp tục đọc từ điểm chính xác nơi bạn dừng lại. Một cách để đạt được điều đó là ghi lại số trang, số dòng và số từ. Vì vậy, bối cảnh thực hiện của bạn để đọc một cuốn sách là 3 số.

Nếu bạn có bạn cùng phòng và cô ấy đang sử dụng cùng một kỹ thuật, cô ấy có thể lấy cuốn sách trong khi bạn không sử dụng nó và tiếp tục đọc từ nơi cô ấy dừng lại. Sau đó, bạn có thể lấy lại và tiếp tục từ nơi bạn đã ở.

Chủ đề làm việc theo cùng một cách. Một CPU đang cho bạn ảo tưởng rằng nó đang thực hiện nhiều phép tính cùng một lúc. Nó làm điều đó bằng cách dành một chút thời gian cho mỗi tính toán. Nó có thể làm điều đó bởi vì nó có bối cảnh thực hiện cho mỗi tính toán. Giống như bạn có thể chia sẻ một cuốn sách với bạn bè của mình, nhiều tác vụ có thể chia sẻ CPU.

Ở cấp độ kỹ thuật hơn, bối cảnh thực thi (do đó là một luồng) bao gồm các giá trị của các thanh ghi của CPU.

Cuối cùng: chủ đề khác với các quy trình. Một luồng là một bối cảnh thực hiện, trong khi một quá trình là một loạt các tài nguyên được liên kết với một tính toán. Một quá trình có thể có một hoặc nhiều chủ đề.

Làm rõ: các tài nguyên được liên kết với một quy trình bao gồm các trang bộ nhớ (tất cả các luồng trong một quy trình có cùng chế độ xem bộ nhớ), mô tả tệp (ví dụ: ổ cắm mở) và thông tin bảo mật (ví dụ: ID của người dùng đã khởi động quá trình).


20
Một sự tương tự tốt hơn sẽ đánh đồng người với CPU (cả hai đều làm gì đó) và đánh đồng sách với không gian địa chỉ (cả hai chỉ tồn tại). Bằng cách đó, dấu trang trong các cuốn sách khác nhau giống như các chủ đề trong các quy trình khác nhau. Một cuốn sách có nhiều hơn một dấu trang sẽ là tương tự của một quá trình đa luồng, đó là những gì mọi người thường có nghĩa khi họ nói "chủ đề". Nó hoạt động cho một máy xử lý đơn, nhưng nó bị hỏng đôi chút khi bạn nói về đa xử lý. Quan tâm ai mà CPU thực thi chức năng f (), nhưng nó không có vấn đề mà người đọc chương 11.
Solomon chậm

@pwnall, cảm ơn rất nhiều vì đã tiêu hóa những khái niệm khó khăn cho những người khác như tôi! Là đa luồng có liên quan đến đa xử lý (hoặc chạy một tiến trình song song trên nhiều CPU, trong trường hợp tôi đang sử dụng thuật ngữ sai)?
aerijman

51

Để xác định một chủ đề chính thức, trước tiên chúng ta phải hiểu ranh giới nơi một chủ đề hoạt động.

Một chương trình máy tính trở thành một quá trình khi nó được tải từ một số cửa hàng vào bộ nhớ của máy tính và bắt đầu thực thi. Một quy trình có thể được thực thi bởi một bộ xử lý hoặc một bộ các bộ xử lý. Một mô tả quá trình trong bộ nhớ chứa thông tin quan trọng như bộ đếm chương trình theo dõi vị trí hiện tại trong chương trình (tức là lệnh nào hiện đang được thực thi), thanh ghi, lưu trữ biến, xử lý tệp, tín hiệu, v.v.

Một luồng là một chuỗi các hướng dẫn như vậy trong một chương trình có thể được thực thi độc lập với mã khác. Hình vẽ cho thấy khái niệm: nhập mô tả hình ảnh ở đây

Các luồng trong cùng một không gian địa chỉ tiến trình , do đó, phần lớn thông tin có trong mô tả bộ nhớ của quá trình có thể được chia sẻ qua các luồng.

Một số thông tin không thể được sao chép, chẳng hạn như ngăn xếp (con trỏ ngăn xếp đến một vùng nhớ khác trên mỗi luồng), các thanh ghi và dữ liệu cụ thể của luồng. Thông tin này đủ để cho phép các luồng được lên lịch độc lập với luồng chính của chương trình và có thể một hoặc nhiều luồng khác trong chương trình.

Hỗ trợ hệ điều hành rõ ràng là cần thiết để chạy các chương trình đa luồng. May mắn thay, hầu hết các hệ điều hành hiện đại đều hỗ trợ các luồng như Linux (thông qua NPTL), các biến thể BSD, Mac OS X, Windows, Solaris, AIX, HP-UX, v.v. Các hệ điều hành có thể sử dụng các cơ chế khác nhau để thực hiện hỗ trợ đa luồng.

Ở đây, đồ họa, khái niệm được đại diện.

Tại đây , bạn có thể tìm thêm thông tin về chủ đề này. Đó cũng là nguồn thông tin của tôi.

Hãy để tôi thêm một câu đến từ Giới thiệu về Hệ thống nhúng của Edward LeeSeshia :

Chủ đề là các chương trình bắt buộc chạy đồng thời và chia sẻ một không gian bộ nhớ. Họ có thể truy cập các biến của nhau. Nhiều học viên trong lĩnh vực này sử dụng thuật ngữ chủ đề trực tuyến, hẹp hơn để chỉ các cách xây dựng chương trình cụ thể chia sẻ bộ nhớ, [những người khác] để đề cập rộng rãi đến bất kỳ cơ chế nào trong đó các chương trình bắt buộc chạy đồng thời và chia sẻ bộ nhớ. Theo nghĩa rộng này, các luồng tồn tại dưới dạng ngắt trên hầu hết tất cả các bộ vi xử lý, thậm chí không có bất kỳ hệ điều hành nào (sắt trần).


45

Các quy trình giống như hai người sử dụng hai máy tính khác nhau, họ sử dụng mạng để chia sẻ dữ liệu khi cần thiết. Chủ đề giống như hai người sử dụng cùng một máy tính, những người không phải chia sẻ dữ liệu rõ ràng nhưng phải cẩn thận thay phiên nhau.

Về mặt khái niệm, các chủ đề chỉ là nhiều con ong thợ ríu rít trong cùng một không gian địa chỉ. Mỗi luồng có ngăn xếp riêng, bộ đếm chương trình riêng, v.v., nhưng tất cả các luồng trong một tiến trình đều có chung bộ nhớ. Tưởng tượng hai chương trình đang chạy cùng một lúc, nhưng cả hai đều có thể truy cập cùng một đối tượng.

Tương phản điều này với các quy trình. Mỗi quy trình có không gian địa chỉ riêng, có nghĩa là một con trỏ trong một quy trình không thể được sử dụng để chỉ một đối tượng trong một đối tượng khác (trừ khi bạn sử dụng bộ nhớ dùng chung).

Tôi đoán những điều quan trọng để hiểu là:

  • Cả hai quá trình và chủ đề có thể "chạy cùng một lúc".
  • Các quy trình không chia sẻ bộ nhớ (theo mặc định), nhưng các luồng chia sẻ tất cả bộ nhớ của chúng với các luồng khác trong cùng một quy trình.
  • Mỗi luồng trong một tiến trình có ngăn xếp riêng và con trỏ lệnh riêng.

Bạn nói rằng "các quy trình không chia sẻ gì (theo mặc định)" nhưng theo cách tương tự, bạn nói rằng "các quy trình giống như hai người sử dụng hai máy tính khác nhau, họ sử dụng mạng để chia sẻ dữ liệu khi cần thiết" Vậy họ có chia sẻ điều gì không?
committedandroider

@commnedandroider: Cuộc gọi tốt. Tôi đã chỉnh sửa câu trả lời của mình để nói rằng các quy trình không chia sẻ bộ nhớ (theo mặc định), nhưng các luồng chia sẻ tất cả bộ nhớ.
Joey Adams

36

Tôi sẽ sử dụng rất nhiều văn bản từ cuốn sách Khái niệm hệ điều hành của ABRAHAM SILBERSCHATZ, PETER BAER GALVIN và GREG GAGNE cùng với sự hiểu biết của tôi về mọi thứ.

Quá trình

Bất kỳ ứng dụng nào nằm trong máy tính dưới dạng văn bản (hoặc mã).

Chúng tôi nhấn mạnh rằng một chương trình tự nó không phải là một quá trình. Một chương trình là một thực thể thụ động, chẳng hạn như một tệp chứa danh sách các hướng dẫn được lưu trữ trên đĩa (thường được gọi là tệp thực thi).

Khi chúng tôi bắt đầu một ứng dụng, chúng tôi tạo một thể hiện thực thi. Trường hợp thực hiện này được gọi là một quá trình. EDIT: (Theo cách giải thích của tôi, tương tự như một lớp và một thể hiện của một lớp, thể hiện của một lớp là một quá trình.)

Một ví dụ về các quy trình là của Google Chrome. Khi chúng tôi khởi động Google Chrome, 3 quy trình được sinh ra:

• Quá trình trình duyệt chịu trách nhiệm quản lý giao diện người dùng cũng như I / O của đĩa và mạng. Một quy trình trình duyệt mới được tạo khi Chrome được khởi động. Chỉ có một quá trình trình duyệt được tạo.

• Các quy trình kết xuất chứa logic để kết xuất các trang web. Do đó, chúng chứa logic để xử lý HTML, Javascript, hình ảnh, v.v. Theo nguyên tắc chung, một quy trình kết xuất mới được tạo cho mỗi trang web được mở trong một tab mới và do đó, một số quy trình kết xuất có thể được kích hoạt cùng một lúc.

• Quá trình trình cắm được tạo cho từng loại trình cắm (như Flash hoặc QuickTime) đang sử dụng. Các quy trình trình cắm chứa mã cho trình cắm cũng như mã bổ sung cho phép trình cắm giao tiếp với các quy trình kết xuất được liên kết và quy trình trình duyệt.

Chủ đề

Để trả lời điều này tôi nghĩ trước tiên bạn nên biết bộ xử lý là gì. Bộ xử lý là phần cứng thực sự tính toán. EDIT: (Tính toán như thêm hai số, sắp xếp một mảng, về cơ bản thực thi mã đã được viết)

Bây giờ chuyển sang định nghĩa của một chủ đề.

Một luồng là một đơn vị cơ bản của việc sử dụng CPU ; nó bao gồm ID luồng, bộ đếm chương trình, bộ thanh ghi và ngăn xếp.

EDIT: Định nghĩa của một chủ đề từ trang web của intel:

Một luồng, hoặc luồng thực hiện, là một thuật ngữ phần mềm cho chuỗi các lệnh được sắp xếp cơ bản có thể được truyền qua hoặc xử lý bởi một lõi CPU.

Vì vậy, nếu quá trình Trình kết xuất từ ​​ứng dụng Chrome sắp xếp một dãy số, việc sắp xếp sẽ diễn ra trên một luồng / luồng thực hiện. (Ngữ pháp liên quan đến chủ đề có vẻ khó hiểu với tôi)

Giải thích của tôi về những điều

Một quá trình là một ví dụ thực hiện. Chủ đề là các công nhân thực tế thực hiện các tính toán thông qua truy cập CPU. Khi có nhiều luồng chạy cho một tiến trình, tiến trình sẽ cung cấp bộ nhớ chung.

EDIT: Thông tin khác mà tôi thấy hữu ích để cung cấp thêm ngữ cảnh

Tất cả các máy tính hiện đại có nhiều hơn một chủ đề. Số lượng luồng trong máy tính phụ thuộc vào số lượng lõi trong máy tính.

Máy tính đồng thời :

Từ Wikipedia:

Điện toán đồng thời là một hình thức điện toán trong đó một số tính toán được thực hiện trong các khoảng thời gian chồng chéo, đồng thời, thay vì tuần tự (một hoàn thành trước khi bắt đầu tiếp theo). Đây là một thuộc tính của một hệ thống, đây có thể là một chương trình riêng lẻ, một máy tính hoặc một mạng mạng và có một điểm thực thi riêng hoặc "luồng điều khiển" cho mỗi tính toán ("quy trình").

Vì vậy, tôi có thể viết một chương trình tính tổng của 4 số:

(1 + 3) + (4 + 5)

Trong chương trình tính tổng này (sẽ là một quá trình đang chạy trên một luồng thực thi) Tôi có thể rẽ nhánh một quy trình khác có thể chạy trên một luồng khác để tính (4 + 5) và trả kết quả về quy trình ban đầu, trong khi quá trình ban đầu tính tổng của (1 + 3).


5
đó là câu trả lời thực sự
Suhail Mumtaz Awan

1
Giúp rất nhiều. Đây là những gì giải thích trông như thế nào.
Dinesh Kumar

Một giá trị lớn của câu trả lời này là nó cung cấp một cuốn sách tham khảo nơi bạn có thể tìm thêm chi tiết nếu cần thiết. Cảm ơn bạn @chatuur!
desa

7

Thật không may, chủ đề không tồn tại. Một chủ đề là một cái gì đó hữu hình. Bạn có thể giết một người, và những người khác vẫn sẽ chạy. Bạn có thể sinh ra các luồng mới .... mặc dù mỗi luồng không phải là quy trình riêng, chúng đang chạy riêng trong quy trình. Trên các máy đa lõi, 2 luồng có thể chạy cùng lúc.

http://en.wikipedia.org/wiki/Simallel_multithreading

http://www.intel.com/intelpress/samples/mcp_samplech01.pdf


1
Điều gì làm cho nó "một cái gì đó hữu hình"? Có phải đó chỉ là dữ liệu được lưu trữ trong TLS và ngăn xếp cuộc gọi của nó?
Richard

Rằng nó không chỉ là một sự trừu tượng để hiểu ... Nếu nó thực sự chỉ là một luồng duy nhất chạy qua lại giả dạng nhiều luồng, OP sẽ đúng, nhưng vâng, tôi sẽ nói rằng dữ liệu này sẽ làm cho nó hữu hình .
Quỹ đạo

Soi sáng cho tôi . . . vậy câu trả lời là gì?
Richard

@Richard không muốn tham gia vào một cuộc tranh luận về ngữ nghĩa, chỉ đưa ra câu trả lời của tôi để cố gắng làm rõ khái niệm với OP.
Quỹ đạo

@richard TLS là gì?
committedandroider

6

Một chủ đề không gì khác hơn là một bối cảnh bộ nhớ (hoặc cách Tanenbaum đặt nó tốt hơn, nhóm tài nguyên) với các quy tắc thực hiện. Đó là một phần mềm xây dựng. CPU không biết chủ đề là gì (một số trường hợp ngoại lệ ở đây, một số bộ xử lý có luồng phần cứng), nó chỉ thực hiện các hướng dẫn.

Nhân giới thiệu khái niệm luồng và xử lý để quản lý bộ nhớ và thứ tự hướng dẫn một cách có ý nghĩa.


5

Điều này được lấy từ một câu trả lời của Yahoo:

Một luồng là một cấu trúc mã hóa không bị ảnh hưởng bởi kiến ​​trúc của một ứng dụng. Một quá trình duy nhất thường xuyên có thể chứa nhiều chủ đề. Các chủ đề cũng có thể giao tiếp trực tiếp với nhau vì chúng có chung các biến.

Các quy trình là các đơn vị thực hiện độc lập với thông tin trạng thái riêng của họ. Họ cũng sử dụng không gian địa chỉ của riêng mình và chỉ có thể tương tác với các quy trình khác thông qua các cơ chế giao tiếp giữa các quá trình.

Tuy nhiên, để đặt trong các thuật ngữ đơn giản hơn, các chủ đề giống như các "nhiệm vụ" khác nhau. Vì vậy, hãy nghĩ về khi bạn đang làm một cái gì đó, ví dụ bạn đang viết ra một công thức trên một tờ giấy. Đó có thể được coi là một chủ đề. Sau đó, một chủ đề khác là bạn viết một cái gì đó khác trên một tờ giấy khác. Đó là nơi đa nhiệm đến.

Bộ xử lý Intel được cho là có "siêu phân luồng" (AMD cũng vậy) và nó có nghĩa là có thể thực hiện nhiều "luồng" hoặc đa nhiệm tốt hơn nhiều.

Tôi không chắc chắn về hậu cần của cách xử lý một chủ đề. Tôi nhớ lại việc nghe về bộ xử lý qua lại giữa chúng, nhưng tôi không chắc chắn 100% về điều này và hy vọng ai đó có thể trả lời điều đó.


Làm thế nào để bộ xử lý Intel xử lý nhiều luồng tốt hơn? Với một lõi đơn, chỉ có một luồng nên thực thi tại một thời điểm. Tôi đồng ý với bộ xử lý qua lại. Bạn thực sự không thể làm điều đó tốt hơn có thể?
committedandroider

Đó là một tối ưu hóa mang lại hiệu suất tốt hơn cho một số trường hợp sử dụng. Bạn có thể đọc về siêu phân luồng ở đây: en.wikipedia.org/wiki/Hyper-threading
Jeremy Friesner

5

Câu trả lời rất khác nhau giữa các hệ thống khác nhau và việc triển khai khác nhau, nhưng các phần quan trọng nhất là:

  1. Một luồng có một luồng thực thi độc lập (tức là bạn có thể chuyển ngữ cảnh khỏi nó, rồi quay lại và nó sẽ tiếp tục chạy ở nơi nó đã ở).
  2. Một luồng có thời gian tồn tại (nó có thể được tạo bởi một luồng khác và một luồng khác có thể đợi nó kết thúc).
  3. Nó có thể có ít hành lý kèm theo hơn một "quy trình".

Ngoài ra: các luồng có thể được triển khai trong một tiến trình bằng một thời gian chạy ngôn ngữ, các luồng có thể là coroutines, các luồng có thể được triển khai trong một tiến trình bởi một thư viện luồng hoặc các luồng có thể là cấu trúc kernel.

Trong một số hệ thống Unix hiện đại, bao gồm cả Linux mà tôi quen thuộc nhất, mọi thứ đều là các luồng - một quá trình chỉ là một loại luồng chia sẻ tương đối ít thứ với cha mẹ của nó (tức là nó có ánh xạ bộ nhớ riêng, bảng tệp riêng của nó và quyền, v.v.) Đọc man 2 clone, đặc biệt là danh sách các cờ, thực sự mang tính hướng dẫn ở đây.


Là một chuyển đổi bối cảnh chỉ khi bộ xử lý đi từ luồng này sang luồng khác (cho dù trong cùng một quy trình hay khác)?
committedandroider

-1

Tôi không thực sự hài lòng với bất kỳ câu trả lời nào, vì vậy tôi sẽ thêm câu trả lời của riêng mình vào đây :) Một luồng là một sự trừu tượng hạt nhân để lập lịch làm việc trên bộ xử lý, một luồng là những gì kernel cung cấp cho bạn để quản lý thời gian của bộ xử lý và chia sẻ công việc với người khác


1
-1 Chủ đề không cần phải được tạo bởi kernel. Các chủ đề với sự hỗ trợ ở cấp độ kernel thực sự được lên lịch bởi kernel (nơi một số loại tòa nhà được phát hành). Nhưng cũng có các luồng với sự hỗ trợ ở cấp thư viện người dùng, với bảng luồng nằm trong không gian người dùng.
AleksandrH

-1

Hãy để tôi giải thích sự khác biệt giữa quá trình và chủ đề đầu tiên.

Một tiến trình có thể có {1..N} số lượng chủ đề. Một lời giải thích nhỏ về bộ nhớ ảo và bộ xử lý ảo.

Bộ nhớ ảo

Được sử dụng như một không gian hoán đổi để một quá trình nghĩ rằng nó đang nằm trên bộ nhớ chính để thực thi.

Bộ xử lý ảo

Khái niệm tương tự như bộ nhớ ảo ngoại trừ điều này là dành cho bộ xử lý. Theo một quy trình, nó sẽ là thứ duy nhất sử dụng bộ xử lý.

HĐH sẽ đảm nhiệm việc phân bổ bộ nhớ ảo và bộ xử lý ảo cho một tiến trình và thực hiện trao đổi giữa các tiến trình và thực hiện.

Tất cả các luồng trong một tiến trình sẽ chia sẻ cùng một bộ nhớ ảo. Nhưng, mỗi luồng sẽ có bộ xử lý ảo riêng được gán cho chúng để chúng có thể được thực thi riêng lẻ.

Do đó tiết kiệm bộ nhớ cũng như tận dụng CPU vào tiềm năng của nó.

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.