6

Tôi muốn sử dụng TPL trong quy trình Công nhân trên Windows Azure. Tôi đang tìm thêm một IJob hàng đợi, điều này có một phương pháp Run, vì vậy người lao động sẽ bao gồm:Nhiệm vụ tối đa trong TPL?

loop get item tắt đợi Sử dụng TPL để gọi IJob.Run, đây là một cuộc gọi async

Nhưng tôi hơi lo ngại về các mục tối đa tôi có thể thêm vào TPL? Tôi rất vui khi xây dựng một nhóm TPL riêng của mình nếu cần, chỉ cần kiểm tra khả năng của nó.

Chúc mừng, Ash.

Trả lời

9

Một trong những mục tiêu chính của TPL là loại bỏ sự cần thiết phải lo lắng về điều này. Bằng cách phân hủy công việc của bạn thành Công việc thay vì Chủ đề, bạn cho phép trình lập lịch biểu xử lý việc cân bằng này một cách thích hợp hơn.

Không có giới hạn trên cố định cho số lượng "tác vụ" mà bạn có thể lên lịch. Chúng được (theo mặc định, với TaskScheduler mặc định) được lên lịch sử dụng ThreadPool, trong đó có .NET 4, tỷ lệ dựa trên công việc. Tôi mạnh mẽ khuyên bạn không nên cố gắng xây dựng hồ bơi của riêng mình - rất khó có khả năng bạn sẽ làm tốt hơn mặc định. Điều đó đang được nói, nếu các tác vụ của bạn có hành vi rất chuẩn, bạn có thể cân nhắc viết một TaskScheduler tùy chỉnh.

Ngoài ra - nhận ra rằng bạn nên, lý tưởng nhất, làm cho công việc của bạn trở nên "lớn nhất có thể". Có chi phí liên quan đến một nhiệm vụ riêng lẻ - có chúng quá nhỏ (về mặt công việc) sẽ khiến cho chi phí trên có tác động lớn hơn đến hiệu suất hơn nếu bạn có số lượng "nhiệm vụ" lớn hơn thích hợp.

+1

Việc 'Task' quá lớn cũng có thể là một vấn đề, vì nó có thể trì hoãn việc xử lý 'Task' khác. Vì vậy, với 'Task' lớn, bạn có thể nhận được thông lượng tốt hơn, nhưng độ trễ tồi tệ hơn. – svick

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