2012-05-06 31 views
7

Trong linux.Điều gì là tốt hơn: Chọn chủ đề vs?

Tôi muốn tạo một hộp thoại tự động sẽ có chức năng bật/tắt khi nhấn một phím. Rõ ràng phải có 2 thứ chạy song song (chính clicker và chức năng bật/tắt)

Điểm yếu và ưu điểm của mỗi lần thực hiện: Sử dụng một chuỗi sẽ xử lý chức năng tự động và một chuỗi chính khác (để bật/tắt vv ...) Hoặc sử dụng syscall, hãy chọn và đợi đầu vào/bàn phím?

+2

Bạn _can_ thực hiện theo cách này. Những phép đo xác định "tốt hơn" ở đây? –

+1

Tôi chỉ muốn biết những lợi thế của mỗi lựa chọn – Jah

+1

@Jah: Vậy thì bạn nên hỏi rằng, thay vì hỏi cái nào là "tốt hơn". –

Trả lời

7

Sử dụng select tốt hơn cho hiệu suất, đặc biệt khi bạn có thể có hàng trăm hoạt động đồng thời. Tuy nhiên nó có thể khó viết mã một cách chính xác và phong cách mã hóa rất khác với lập trình luồng đơn truyền thống. Ví dụ: bạn cần phải tránh gọi bất kỳ phương thức chặn nào vì nó có thể chặn toàn bộ ứng dụng của bạn.

Hầu hết mọi người tìm thấy việc sử dụng chuỗi đơn giản hơn vì phần lớn mã giống với mã chuỗi đơn thông thường. Phần khó nhất là ở một vài nơi mà bạn cần trao đổi thông tin liên lạc, thông qua mutexes hoặc các cơ chế đồng bộ hóa khác.

Trong trường hợp cụ thể của bạn có vẻ như bạn sẽ chỉ cần một số lượng nhỏ các chủ đề, vì vậy tôi muốn đi cho các mô hình lập trình đơn giản bằng cách sử dụng các chủ đề.

+5

Trích dẫn cần thiết cho câu đầu tiên. Tôi nghi ngờ về các hệ thống hiện đại phức tạp hơn rất nhiều. Chắc chắn với * nhiều * tập tin mô tả trong hành động, chủ đề cho phép hạt nhân chỉ đơn giản là thức dậy các chủ đề bị chặn chứ không phải là 'chọn' phải liên tục quét' N' bit trong một mảng và thêm/loại bỏ chính nó từ một hàng chờ đợi cho mỗi . Các luồng cũng dường như có thể tối ưu hóa cho các chuyển đổi hạt nhân người dùng ít nhất. Có thể có các luồng lý do trực giao khác chậm hơn, nhưng tôi không nghĩ đó là một vấn đề rõ ràng đơn giản như vậy. –

1

Với số lượng công việc bạn đang làm, điều đó có thể không quan trọng.

Đối với các ứng dụng hiệu suất cao, có sự khác biệt. Trong những trường hợp này, bạn cần phải xử lý hàng nghìn kết nối cùng một lúc; trong những trường hợp như vậy, bạn đưa ra các kết nối mới cho các chủ đề mới.

Tạo hàng nghìn chủ đề tốn kém, vì vậy việc chọn được sử dụng để đạt hiệu quả. Trên thực tế các kỹ thuật khác nhau như kqueue hoặc epoll được sử dụng để chuyển đổi tối ưu.

Tôi nói điều đó không quan trọng, bởi vì bạn có khả năng sẽ chỉ tạo chuỗi một lần và có chính xác hai luồng chạy trong suốt thời gian của ứng dụng.

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