传统观点告诉我们,大批量的企业Java应用程序应该优先使用线程池来产生新的工作线程。 java.util.concurrent的使用使得这个直接。 但是,在某些情况下,线程池并不适合。 我目前正在摔跤的具体例子是使用InheritableThreadLocal ,它允许ThreadLocalvariables被“传递”到任何派生的线程。 这个机制在使用线程池的时候会中断,因为工作线程通常不是从请求线程派生的,而是预先存在的。 现在有办法解决(线程本地可以显式传入),但这并不总是合适的或实际的。 最简单的解决scheme是按需生成新的工作线程,并让InheritableThreadLocal完成工作。 这使我们回到这个问题 – 如果我有一个大量的网站,用户请求线程每个产生六个工作线程(即不使用线程池),这是否会给JVM一个问题? 我们可能在谈论每秒创build几百个新线程,每个线程持续不到一秒钟。 现代JVM是否优化了这个呢? 我记得在Java中需要对象池的时候,因为对象创build是昂贵的。 这从此变得不必要了。 我想知道如果同样适用于线程池。 如果我知道要衡量什么,我会以此为基准,但是我担心的是这些问题可能比用分析器可以测量的更微妙。 注意:使用线程本地人的智慧不是这里的问题,所以请不要暗示我不使用它们。
Scala是否支持尾recursion优化?
这里是我查询的一部分,反映了EMAIL_ADDRESS列的数据types和属性: EMAIL_ADDRESS CHARACTER VARYING(20) NOT NULL, 然而, 约翰·桑德斯使用VARYING(256) 。 这表明我不一定正确地理解VARYING。 据我所知,电子邮件地址的长度是20个字符,而Jodn是256个字符。 John的代码中的上下文 CREATE TABLE so."User" ( USER_ID SERIAL NOT NULL, USER_NAME CHARACTER VARYING(50) NOT NULL, EMAIL_ADDRESS CHARACTER VARYING(256) NOT NULL, // Here HASHED_PASSWORD so.HashedPassword NOT NULL, OPEN_ID CHARACTER VARYING(512), A_MODERATOR BOOLEAN, LOGGED_IN BOOLEAN, HAS_BEEN_SENT_A_MODERATOR_MESSAGE BOOLEAN, CONSTRAINT User_PK PRIMARY KEY(USER_ID) ); 我从来没有见过超过20个字符的电子邮件地址,普通人使用。 数据库中电子邮件地址的最佳长度是多less?
我正在做一些性能testing,并注意到一个LINQexpression式 result = list.First(f => f.Id == i).Property 比…慢 result = list.Where(f => f.Id == i).First().Property 这似乎是违反直觉的。 我会认为第一个expression式会更快,因为一旦谓词满足,它可以停止迭代列表,而我会认为.Where()expression式可能会在调用.First()之前迭代整个列表.First()在所得到的子集上。 即使后者发生短路,也不应该比直接使用First更快,但它是。 下面是说明这一点的两个非常简单的unit testing。 在TestWhereAndFirst上进行优化编译时,比在.Net和Silverlight 4上的TestFirstOnly快30%左右。我尝试使谓词返回更多的结果,但性能差异是相同的。 任何人都可以解释为什么.First(fn)慢于.Where(fn).First() ? 我看到类似的计数器直观的结果.Count(fn)与.Count(fn)相比。 private const int Range = 50000; private class Simple { public int Id { get; set; } public int Value { get; set; } } [TestMethod()] public void TestFirstOnly() […]
有没有在网上提供的C#/ F#性能比较来显示正确使用新的F#语言?
有一天我正在做一些Python基准testing,并且遇到了一些有趣的事情。 下面是两个或多或less做同样的事情循环。 循环1需要循环2的两倍左右才能执行。 循环1: int i = 0 while i < 100000000: i += 1 循环2: for n in range(0,100000000): pass 为什么第一个循环这么慢? 我知道这是一个微不足道的例子,但这引起了我的兴趣。 range()函数有什么特别之处,它比以同样的方式递增variables更有效率?
对于一个简单的链表来说,对列表元素的随机访问是不需要的,使用std::list而不是std::vector有什么显着的优点(性能或其他) 如果需要向后遍历,在迭代元素之前使用std::slist和reverse()会更有效率吗?
在性能方面,什么工作会更快? 有区别吗? 它是依赖于平台吗? //1. Using vector<string>::iterator: vector<string> vs = GetVector(); for(vector<string>::iterator it = vs.begin(); it != vs.end(); ++it) { *it = "Am I faster?"; } //2. Using size_t index: for(size_t i = 0; i < vs.size(); ++i) { //One option: vs.at(i) = "Am I faster?"; //Another option: vs[i] = "Am I faster?"; }
我想听听.Net框架中大量密封类的动机是什么。 封盖课程有什么好处? 我无法理解如何让inheritance可以是有用的,而且很可能不是唯一一个与这些阶级作战的人。 那么,为什么这个框架是以这种方式devise的呢?为什么要开封一切呢? 必须有另一个原因,但只是邪恶?
我们可以通过哪种方式来减lessasp.net应用程序发送的HTML响应的大小? 我正在使用不属于我的控件,它使用空格产生输出。 我感兴趣的是如何谷歌如何(查看源代码www.google.com)来缩短整个页面的HTML输出,以提高时间。 有没有可用于ASP.NET的实用工具类,可以为我做这个东西?