2009-07-08 54 views
7

Tôi luôn nhầm lẫn về các khái niệm luồng. Tôi đã không có cơ hội sử dụng chúng trong một môi trường thực sự cho đến nay. Sẽ rất hữu ích nếu ai đó có thể giải thích các chủ đề cho tôi.Chủ đề là gì (Chủ đề là gì)?

+1

Câu hỏi này quá rộng để trả lời. Ngoài ra, nếu bạn không cần phải sử dụng đề tài thì đừng. Thật quá dễ dàng để làm điều sai trái. –

+4

Điều này có vẻ là một câu hỏi hoàn toàn hợp pháp đối với tôi, điều này có thể giúp ích cho nhiều người. –

+0

@JohnSaunders Đó là một câu hỏi hoàn toàn hợp pháp. Không phải mọi câu hỏi trên SA đều cần phải nghiên cứu sâu về độ sâu bí ẩn, bí truyền của CNTT và lập trình. Stahp nó. – Seph

Trả lời

7

Một lời giải thích đơn giản là bạn có việc phải làm và bạn có một người làm công việc.

Người này giống với một chủ đề trong máy tính.

Một người có thể làm một việc tại một thời điểm, do đó, để thực hiện công việc, anh ấy thực hiện các công việc của công việc, một nhiệm vụ tại một thời điểm, một thao tác trên mỗi tác vụ tại một thời điểm.

Để tăng tốc công việc, bạn có thể đặt nhiều người hơn vào cùng một công việc. Ví dụ, giả sử bạn cần vẽ một ngôi nhà. Bạn thuê 4 người để làm điều này.

4 người này có thể tương tự như 4 chủ đề ở chỗ họ làm việc với cùng tài nguyên (cùng một nhà, cùng một nhóm sơn) và họ có thể chia công việc.

Quy trình sẽ giống như công việc vẽ ngôi nhà đó.

Lời giải thích đơn giản này phần nào bị hỏng khi nói đến các máy không có đủ lõi CPU để chạy tất cả các luồng cùng một lúc, nhưng tôi sẽ bỏ qua điều này ở đây.

+0

Đơn giản và dễ hiểu. –

2

Một chuỗi riêng lẻ được đặt tên như vậy bởi vì nó là một chuỗi thực thi duy nhất thông qua mã của bạn. Nếu bạn có nhiều luồng thì bạn có nhiều luồng thực hiện thông qua mã của bạn cùng một lúc (hoặc đồng thời như hệ thống đơn/đa lõi của bạn hỗ trợ). Cả hai chủ đề có quyền truy cập vào cùng một đống mặc dù sử dụng ngăn xếp khác nhau. Điều này có nghĩa là dữ liệu trong chương trình của bạn có thể được hiển thị bởi cả hai luồng và có thể bị thay đổi bởi một trong hai luồng. Điều này tất nhiên có thể dẫn đến các vấn đề nghiêm trọng đòi hỏi phải bảo vệ chống lại.

Cần lưu ý rằng một luồng khác với quy trình. Một sự khác biệt chính là hai luồng có thể truy cập cùng một dữ liệu (heap) trong khi hai tiến trình không thể.

Đối với một mô tả đầy đủ hơn thấy giới thiệu trực tuyến khác

wikipedia

2

Lúc nguy cơ quá đơn giản:

Một chủ đề là một dòng thực hiện thông qua một chương trình.

Trong mô hình lập trình cơ bản của bạn, máy tính chỉ cần theo dõi từng chương trình của bạn một lần, và tại bất kỳ thời điểm nào, chỉ có một câu lệnh đang bị truy tố. Nếu các nhánh chương trình của bạn hoặc gọi một thường trình khác, việc thực hiện sẽ rời khỏi nơi điều khiển được chuyển và bắt đầu thực hiện tại một nơi khác, nhưng vẫn còn, chỉ có một điều đang được thực hiện tại một thời điểm.

Với chủ đề, nhiều dòng điều khiển có thể được thực hiện cùng một lúc. Ví dụ: một phần chương trình của bạn có thể tương tác với người dùng, trong khi một phần khác đang tải xuống tệp ở chế độ nền. Các chương trình đa luồng khó lập trình hơn nhiều và khó có thể dự đoán chúng hoạt động như thế nào.

7

Thứ gì đó không ai mất thời gian để giải thích cho tôi là sự khác biệt giữa quy trình và chuỗi. Một khi bạn hiểu rằng, nơi mà các chủ đề phù hợp làm cho rất nhiều ý nghĩa.

Hệ điều hành cung cấp bộ nhớ xử lý để sử dụng. Một quá trình khi bắt đầu thường có một "chuỗi" chạy bên trong nó.

Chủ đề là những gì hệ điều hành lên lịch chạy trên CPU và nó được cung cấp một địa chỉ để bắt đầu thực hiện các hướng dẫn từ đó.

Một số người thông minh hơn nhiều so với tôi đã phát hiện ra rằng việc thực hiện các quy trình trong hầu hết các hệ điều hành là tốn kém hơn nhiều so với việc tạo ra một luồng thực thi. Ngoài ra hai luồng trong cùng một tiến trình có khả năng truy cập vào bộ nhớ của các tiến trình mà không cần sử dụng một cuộc gọi hệ điều hành và/hoặc bộ nhớ chia sẻ để làm như vậy, có nghĩa là mặc dù bây giờ bạn cần đồng bộ hóa truy cập bộ nhớ luồng, bạn có thể làm nhiều việc hơn thời gian.Vì vậy luồng là một khái niệm quan trọng cần hiểu và việc sử dụng chính là tăng hiệu suất của các chương trình có đồng thời có thể được khai thác, sử dụng chính đầu tiên (EDIT: Đây có thể không phải là "sử dụng đầu tiên") chạy GUI của một ứng dụng trên một luồng và thực hiện xử lý trên một luồng khác, nền tảng của thiết kế giao diện người dùng hiện đại.

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