- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - phát hiện rò rỉ bộ nhớ Ruby/Ruby on Rails
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
好吧...我对该网站进行了公平的搜索,并阅读了很多关于该主题的帖子。我发现了这个问题:Code for a simple thread pool in C#特别有帮助。
然而,一如既往,我需要的东西略有不同。
我查看了 MSDN 示例并根据我的需要对其进行了一些调整。我引用的例子在这里:http://msdn.microsoft.com/en-us/library/3dasc8as(VS.80,printer).aspx
我的问题是这样的。我有一组相当简单的代码,它通过 HttpWebRequest
Và WebResponse
类加载网页,并通过 Suối
读取结果。我在一个线程中触发这个方法,因为它需要执行很多次。该方法本身很短,但它需要被触发的次数(每次都有不同的数据)会有所不同。它可以是 1 到 200 之间的任何值。
我读过的所有内容似乎都表明 ThreadPool
类是主要候选者。这就是事情变得棘手的地方。我可能需要触发这个东西说 100 次,但我最多只能运行 3 个线程(对于这个特定任务)。
我尝试通过以下方式在 ThreadPool
上设置 MaxThreads
:
ThreadPool.SetMaxThreads(3, 3);
我不完全相信这种方法有效。此外,我不想破坏将在其上运行的系统上运行的其他网站或程序。因此,通过限制 ThreadPool
上的线程数量,我能否确定这仅适用于我的代码和我的线程?
MSDN 示例使用事件驱动方法并调用 WaitHandle.WaitAll(doneEvents);
我就是这样做的。
所以我的问题的核心是,如何确保或指定可以为他们的代码运行的最大线程数,但让代码继续运行更多的线程,因为前面的线程结束直到某个任意点?我的处理方式是否正确?
此致
Jason
好的,我添加了信号量方法并完全删除了 ThreadPool
代码。看起来很简单。我的信息来自:http://www.albahari.com/threading/part2.aspx
正是这个例子向我展示了如何:
[下面的文字是从网站上复制/粘贴的]
容量为 1 的 Semaphore
类似于 Mutex
hoặc khóa
,除了 Semaphore
没有“所有者”——它与线程无关。任何线程都可以在 Semaphore
上调用 Release
,而使用 Mutex
Và khóa
时,只有获得资源的线程可以释放它。
在下面的示例中,十个线程执行一个循环,中间有一个 Sleep
语句。 Semaphore
确保不超过三个线程可以同时执行该 Sleep
Tuyên bố:
class SemaphoreTest
{
static Semaphore s = new Semaphore(3, 3); // Available=3; Capacity=3
static void Main()
{
đối với (int i = 0; i < 10; i++)
new Thread(Go).Start();
}
static void Go()
{
while (true)
{
s.WaitOne();
Thread.Sleep(100); // Only 3 threads can get here at once
s.Release();
}
}
}
câu trả lời hay nhất
注意:如果您将此限制为“3”只是为了不让运行您的应用程序的机器不堪重负,我会首先确保这是一个问题。线程池应该为你管理这个。另一方面,如果您不想淹没其他资源,请继续阅读!
您无法管理线程池的大小(或者关于线程池的大部分内容)。
在这种情况下,我会使用信号量来管理对您的资源的访问。在您的情况下,您的资源正在运行网络抓取,或计算一些报告等。
为此,在您的静态类中创建一个信号量对象:
System.Threading.Semaphore S = new System.Threading.Semaphore(3, 3);
然后,在每个线程中,您执行以下操作:
System.Threading.Semaphore S = new System.Threading.Semaphore(3, 3);
thử
{
// wait your turn (decrement)
S.WaitOne();
// do your thing
}
finally {
// release so others can go (increment)
S.Release();
}
每个线程都将阻塞在 S.WaitOne() 上,直到它收到继续执行的信号。一旦 S 递减 3 次,所有线程都将阻塞,直到其中一个线程递增计数器。
这个解决方案并不完美。
如果您想要更简洁、更高效的东西,我建议您使用 BlockingQueue 方法,在这种方法中,您可以将要执行的工作排入一个全局阻塞队列对象中。
与此同时,您有三个线程(您创建的——不在线程池中),从队列中弹出工作以执行。这并不难设置,而且非常快速和简单。
ví dụ:
关于C#线程池限制线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/444627/
Tôi sử dụng Bootstrap với tập lệnh css và java. Tôi thực sự gặp khó khăn khi vẽ nền này bằng css mà không ảnh hưởng đến mã giao diện người dùng. Trong nhiều câu hỏi, mọi người đặt chiều rộng và chiều cao thành 0%. Nhưng vì thanh điều hướng của tôi nên tôi không thể sử dụng
Tôi đang viết chương trình bằng c để đọc nội dung của tệp. Mã như sau: #include void main() { char line[90] while(scanf("%79[^\
Tôi muốn nhận tất cả các cặp dòng Góc trong một mảng ma trận bằng javascript. Giả sử đầu vào và đầu ra như sau: đầu vào = [ [1,2,3], [4,5,6], [7,8,9], ] đầu ra =
Có thể vẽ đường thẳng, hình tròn và các hình dạng khác bằng pdfmake không? Nếu có, có tài liệu hoặc mẫu không? Tôi muốn thay thế pdfmake bằng jsPDF. Câu trả lời hay nhất Có, có thể. pdfm
Tôi có một tiện ích svg nhỏ có mục đích hiển thị danh sách các góc (xem hình). Bây giờ góc là một phần tử đường chỉ có một nét và không có phần tô màu. Nhưng bây giờ tôi muốn sử dụng màu "tô bên trong" và màu "nét/viền". Tôi đoán phần tử dòng không giải quyết được vấn đề này,
Tôi đang viết một bộ chuyển đổi ánh sáng rất cơ bản cho cảnh 3D với các vật thể hình tam giác, mọi thứ đều hoạt động tốt cho đến khi tôi quyết định thử chuyển đổi tia từ một điểm khác với điểm gốc của cảnh (0/0/0). Tuy nhiên, khi tôi thay đổi gốc tia thành (0/1/0), bài kiểm tra giao điểm sẽ bị hỏng
Câu hỏi này đã có câu trả lời: Tại sao người ta viết "#!/usr/bin/env python" trên dòng đầu tiên của tập lệnh Python? (22 câu trả lời?
Làm cách nào tôi có thể vẽ một đường ngang bằng cách sử dụng khoảng 50 dấu hoa thị* và sử dụng vòng lặp for? Khi tôi cố gắng thực hiện việc này, kết quả là một danh sách dọc (thay vì ngang) gồm 50 dấu hoa thị. public void drawAstline() { f
Đây là giao diện người dùng làm cho quả bóng rơi theo đường chéo, nhưng quả bóng vẫn đứng yên; đường ren dường như không hoạt động bình thường. Bạn có thể chỉ cho tôi cách làm cho quả bóng chuyển động được không? Vui lòng tải xuống quả bóng và thay đổi thư mục để chương trình có thể tìm thấy vị trí được chỉ định cho quả bóng của bạn. Không cần phải tải xuống sân bóng đá, nhưng bạn có thể nếu muốn
Tôi đang sử dụng Jmeter và Ant trong một trong các dự án của mình, khi chúng tôi tạo báo cáo, nó sẽ hiển thị URL, #Samples, Thất bại, Tỷ lệ thành công, Thời gian trung bình, Thời gian tối thiểu, Thời gian tối đa trong báo cáo. Tôi cũng muốn đưa mốc thời gian 90% vào báo cáo. Hiện nay
Tôi có một vấn đề bất thường và hy vọng ai đó có thể giúp tôi. Tôi muốn vẽ một đường Xoay hoặc đường lượn sóng bằng Canvas (android) nhưng tôi không biết cách thực hiện. Nó sẽ là đuôi của con nòng nọc, vì vậy lý tưởng nhất là tôi muốn nó có hình dạng giống hình tam giác hơn, với một đầu lớn hơn
Câu hỏi này đã có câu trả lời: Kiểm tra sự va chạm của các hình dạng bằng JavaFX (1 câu trả lời) Đã đóng 8 năm trước. Tôi đang sử dụng thư viện JavaFx 8. Nhiệm vụ của tôi rất đơn giản: Tôi muốn kiểm tra
Cách chia tập tin theo tỷ lệ phần trăm được đánh số. Số hàng? Giả sử tôi muốn chia tệp của mình thành 3 phần (60%/20%/20% phần), tôi có thể thực hiện việc này theo cách thủ công, -_-: $ wc -l brown.txt 57339 brown.tx
Tôi đang cố gắng đạt được điều gì đó như thế này: Nhưng đây là điều tôi đã làm được. Bạn có thể giúp tôi đạt được kết quả mong muốn? Cập nhật: Nếu tôi xóa phần phụ thuộc bootstrap.css, sự cố sẽ biến mất. Làm cách nào tôi có thể làm cho nó hoạt động với Bootstrap?
Tôi hiện đang xây dựng một trang web và gặp sự cố với biến đổi: tỷ lệ. Tôi có một nút và khi người dùng di chuột qua nó, có hai điều xảy ra: Nền "quét" theo đường Góc Nhãn nút thay đổi màu Nút thay đổi một chút
Tôi cần vẽ đồ thị của một số lượng lớn điểm dữ liệu bằng cách sử dụng các đường thẳng và phép biến đổi affine (chia tỷ lệ biểu đồ để vừa với Chế độ xem). Hiện tại, tôi đang sử dụng NSBezierPath, nhưng tôi nghĩ nó không hiệu quả (vì các điểm được sao chép vào đường dẫn bezier trước khi vẽ). Bằng cách cắt dữ liệu của tôi thành
Tôi đang sử dụng trình phát hiện tính năng HOG dựa trên phân loại SVM. Tôi có thể trích xuất thành công biển số xe, nhưng biển số xe được trích xuất có một số pixel/dòng không cần thiết ngoài số biển số xe. Luồng xử lý hình ảnh của tôi như sau: Áp dụng bộ dò HOG trên ảnh thang độ xám để cắt tông màu vùng được phát hiện
Tôi có hình ảnh sau: Tôi muốn điền vào đường viền của nó (tức là tôi muốn điền các dòng vào hình ảnh này). Tôi đã thử đóng hình thái nhưng sử dụng hạt nhân hình chữ nhật có kích thước 3x3 và 10 lần lặp không lấp đầy toàn bộ đường viền. Tôi cũng đã thử lõi 21x21 và 1 lần lặp, nhưng
Tôi phải tìm một thuật toán có thể tìm tổng số giao điểm giữa hai tập hợp mảng, một trong số đó đã được sắp xếp. Ví dụ ta có 2 mảng này và vẽ các đường thẳng đến các số tương ứng. Hai mảng này cho chúng ta tổng cộng 7 giao điểm. Có thuật toán nào có thể giúp tôi giải quyết vấn đề này không
Nói một cách đơn giản - Tôi muốn vẽ một tia/đường thẳng từ mặt phẳng cắt gần đến mặt phẳng cắt xa bằng cách sử dụng phép chiếu phối cảnh. Tôi có những gì tôi tin là tọa độ thế giới được chuẩn hóa chính xác được tạo bằng một cú nhấp chuột bằng các phương pháp được mô tả trong các hướng dẫn lập trình đồ họa/OpenGL khác nhau. Vấn đề tôi đang gặp phải là đèn của tôi dường như
Tôi là một lập trình viên xuất sắc, rất giỏi!