Tag: 调节

在Java中调节线程的CPU /内存使用率?

我正在编写一个应用程序,它将运行多个线程,并希望限制这些线程的CPU /内存使用量。 对于C ++有一个类似的问题 ,但是我想尽量避免使用C ++和JNI。 我意识到这可能不会使用更高级别的语言,但我很好奇,看看有没有人有任何想法。 编辑:增加了一个赏金; 我想要一些非常好的,深思熟虑的想法。 编辑2:我需要这个的情况是在我的服务器上执行其他人的代码。 基本上它是完全的任意代码,唯一的保证就是在类文件上会有一个主要的方法。 目前,在运行时加载的多个完全不同的类正在作为单独的线程同时执行。 写它的方式,重构为每个被执行的类创build单独的进程将是一个痛苦。 如果这是通过VM参数来限制内存使用的唯一好方法,那就这样吧。 但是我想知道是否有办法用线程来完成。 即使作为一个单独的过程,我想能够以某种方式限制其CPU使用率,因为如前所述,其中几个将立即执行。 我不想要一个无限循环来占用所有的资源。 编辑3:一个简单的方法来近似对象的大小是与java的Instrumentation类; 具体来说就是getObjectSize方法。 请注意,使用此工具需要一些特殊设置。

限制asynchronous任务

我想运行一堆asynchronous任务,限制在任何给定时间有多less任务可能正在等待完成。 假设您有1000个url,并且您只希望一次打开50个请求; 但只要一个请求完成,您就可以打开到列表中下一个URL的连接。 那样的话,一次只能打开50个连接,直到URL列表被耗尽。 如果可能的话,我也想利用给定数量的线程。 我想出了一个扩展方法, ThrottleTasksAsync ,做我想要的。 那里有一个更简单的解决scheme吗? 我会假设这是一个常见的情况。 用法: class Program { static void Main(string[] args) { Enumerable.Range(1, 10).ThrottleTasksAsync(5, 2, async i => { Console.WriteLine(i); return i; }).Wait(); Console.WriteLine("Press a key to exit…"); Console.ReadKey(true); } } 这里是代码: static class IEnumerableExtensions { public static async Task<Result_T[]> ThrottleTasksAsync<Enumerable_T, Result_T>(this IEnumerable<Enumerable_T> enumerable, int maxConcurrentTasks, int maxDegreeOfParallelism, […]