AR+手工艺:这款 AR 工具让你一秒变鲁班 获取链接 Facebook Twitter Pinterest 电子邮件 其他应用 发布于 八月 24, 2016 <p> 当你需要一个新的书桌、凳子或别的什么时,再也不用开车去宜家购买了。现在,好工具 Shape Origin 能让你就地取材,分分钟做出你想要的,即使你一点儿经验都没有。</p><p> <img src="http://www.arinchina.com/file/upload/201608/23/1754135011584.jpg" /></p><p> Shape Origin 是一个咖啡机大小的工具,采用 AR 技术,让新手(或专业人士)精准完成切割木材、塑料、金属,甚至是碳纤维。通过一个 5 英寸的触摸屏,你可以沿着数字化路径完成操作,控制数控机床进行切割。如果出现失误,机器会为你纠正。</p><p> 这款工具是旧金山一家叫做 Shaper 的硬件创业公司的首款产品,该公司专注于改进数控机床操作方式,想让工具制作像 3D 打印一样简单。</p><p> [iframe]http://v.qq.com/iframe/player.html?vid=v0323we75h1&tiny=0&auto=0[/iframe]</p><p> <strong>如何操作?</strong></p><p> Alec Rivers 是 Shape Origin 的发明者,当时他正在麻省理工学院,修读计算机视觉博士学位。当他继承他祖父的工具时,突然发现自己连个相框都不会做。</p><p> 「他意识到自己无法用这些工具完成制作」,公司 CEO Joe Hebenstreit 说,「真是令人沮丧。我认为很多人都会遇到这样的情况,突发奇想想制作点什么,却发现自己并没有 20 年的经验积累,根本没法完成。」</p><p> <img src="http://www.arinchina.com/file/upload/201608/23/1754297211584.jpg" /></p><p> 当你进行切割时,只需要大致随着屏幕显示的形状切割,该工具能自动增加细节操作。Shape Origin 为计算机视觉采用了特殊设计的卷尺,附着到被切割物体表面,帮助工具本身进行自身定位。</p><p> 设计师可以把自己设计的 CAD 或 Illustrator 矢量文件上传到 Shaper 公司网站,而普通用户可以从公司网站上下载共享的设计文件。Shape Origin 还允许用户直接绘制图形,如拉出一个方形或圆形,或用钢笔工具画出来,而不用重回电脑操作。</p><p> <img src="http://www.arinchina.com/file/upload/201608/23/1755087011584.jpg" /></p><p> <strong>产品目标</strong></p><p> Hebenstreit 说:「这是工具产品的最终形态:普通人 1 分钟就能明白如何操作。」他曾担任 Google Glass 产品工程设计主管。「这台机器能让你从一无所知到熟练完成,你甚至会惊叹『天啊,我真的做到了』。」</p><p> 「很多人谈论机器人会接管世界,取代我们所做的一切」,Hebenstreit 说,「而在我看来,未来技术将增强我们的能力,让我们做到我们以前做不到的事情。Shape Origin 就是一个很好的例子。」</p><p> <img src="http://www.arinchina.com/file/upload/201608/23/1754553411584.jpg" /></p><p> 该公司的终极目标是希望该工具将有助于推动分布式制造,让本地所需的工具、设备可以直接就在本地进行生产、制造。他说:「我们确实强烈地感到,我们能够使人们在当地完成生产、制造,而不用把材料运输到世界各地」。</p><p> 而其他一些项目,如总部位于伦敦的 Open Desk,也提供设计下载服务,以在本地制造,但通常需要用户支付使用数控机床的费用。</p><p> 「我们让人们能够直接制造」,他说,「如果你想的话,你几乎可以在家制作一件家具,只需要最基础的成本就够了。」</p> 当你需要一个新的书桌、凳子或别的什么时,再也不用开车去宜家购买了。现在,好工具 Shape Origin 能让你就地取材,分分钟做出你想要的,即使你一点儿经验都没有。 Shape Origin 是一个咖啡机大小的工具,采用 AR 技术,让新手(或专业人士)精准完成切割木材、塑料、金属,甚至是碳纤维。通过一个 5 英寸的触摸屏,你可以沿着数字化路径完成操作,控制数控机床进行切割。如果出现失误,机器会为你纠正。 这款工具是旧金山一家叫做 Shaper 的硬件创业公司的首款产品,该公司专注于改进数控机床操作方式,想让工具制作像 3D 打印一样简单。 [iframe]http://v.qq… 阅读全文
爸带你去吃旋转寿司 获取链接 Facebook Twitter Pinterest 电子邮件 其他应用 发布于 八月 23, 2016 <p><img src="https://static.ktsee.com/s1/2016/08/20160823141529636.jpg" /></p> 阅读全文
纯PHP下 Mysql PDO 使用方法小记 获取链接 Facebook Twitter Pinterest 电子邮件 其他应用 发布于 八月 19, 2016 1 配置信息 $config = array( 'db' => array( 'host' => '127.0.0.1', 'user' => 'root', 'pass' => '', 'db' => 'test_db', 'dns' =>… 阅读全文
物联网相关web技术 获取链接 Facebook Twitter Pinterest 电子邮件 其他应用 发布于 八月 18, 2016 找了一下一些常用的物联网相关的Web技术,整理如下。 REST REST不论是在HTTP协议中,还是在CoAP中都是常用的技术之一,虽然说不上是技术,但是常用是有的。 REST从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的 应用通过URI来获取资源的表征。获得这些表征致使这些应用程序转变了其状态。随着不断获取资源的表征,客户端应用不断地在转变着其状态,所谓表征状态转移。 记得我在写毕业论文的时候这样写到: REST服务实际上是充当着网络与设备的传输介质,构建一个REST服务也就相当于 获取一个URL下的某个数据。 需要注意的是,这里最后关注的还是M2M的思想,写给机器的… 阅读全文
反恐精英CS 1.6 精简中文版 获取链接 Facebook Twitter Pinterest 电子邮件 其他应用 发布于 八月 18, 2016 <p> SteamCN精简中文版CS1.6 V1.10特性:</p><p> <img src="https://static.ktsee.com/s1/2016/08/20160818090455226.png" /></p><p> ·官方正版提取:本程序中的所有文件均由Steam官方正版gcf文件中提取精简汉化,确保使用安全</p><p> ·自娱自乐首选:内涵兼容度极高的YAPB机器人,并且设置“=”控制菜单,完全汉化,易于使用</p><p> ·完全中文汉化:包括人物、地图、任务、武器说明及选单,适合初学者使用</p><p> ·增强功能方便:超级“H”键菜单,快速设置游戏选项,并嵌入参说帮助、常用中文聊天短语</p><p> ·精简程序文件:仅保留程序运行所必需的文件,剔除无用的垃圾文件,确保传输方便</p><p> ·优化配置选项:针对FPS进行优化配置,使游戏运行更加稳定流畅,提高游戏体验</p><p> ·自带经典地图:自带一幅经典地图,汉化说明文件,方便初学玩家,还可下载地图增量升级包</p><p> ·版本自由转换:3329-3326随意转换并提供后续增量升级版本,体积小,下载方便,解除玩家后顾之忧</p><p> ·方便实用键位:更为专业、实用的键盘设置,易于初学者掌握</p><p> 配置需求:</p><p> 1.最低配置</p><p> CPU:800MHz</p><p> 内存:128MB</p><p> 显卡:支持DirectX 7的3D加速卡</p><p> 操作系统:Windows 98/ME/2000/XP/</p><p> 2.推荐配置</p><p> CPU:2.4GHz或以上</p><p> 内存:512MB</p><p> 显卡:支持DirectX9的3D加速卡</p><p> 操作系统:Windows 2000/XP</p><p> </p><div class="free">下载:<a href="https://static.ktsee.com/s1/2019/10/31/5dba6e2e60097.zip.001" target="_blank" rel="noopener">CS1.6cn反恐精英.zip.001</a> | <a href="https://static.ktsee.com/s1/2019/10/31/5dba6e2e60097.zip.002" target="_blank" rel="noopener">CS1.6cn反恐精英.zip.002</a></div> SteamCN精简中文版CS1.6 V1.10特性: ·官方正版提取:本程序中的所有文件均由Steam官方正版gcf文件中提取精简汉化,确保使用安全 ·自娱自乐首选:内涵兼容度极高的YAPB机器人,并且设置“=”控制菜单,完全汉化,易于使用 ·完全中文汉化:包括人物、地图、任务、武器说明及选单,适合初学者使用 ·增强功能方便:超级“H”键菜单,快速设置游戏选项,并嵌入参说帮助、常用中文聊天短语 ·精简程序文件:仅保留程序运行所必需的文件,剔除无用的垃圾文件,确保传输方便 ·优化配置选项:针对FPS进行优化配置,使游戏运行更加稳定流畅,提高游戏体验 ·自带经典地图:自带一幅经… 阅读全文
高并发Web服务的演变——节约系统内存和CPU 获取链接 Facebook Twitter Pinterest 电子邮件 其他应用 发布于 八月 17, 2016 <p> 一、越来越多的并发连接数现在的Web系统面对的并发连接数在近几年呈现指数增长,高并发成为了一种常态,给Web系统带来不小的挑战。以最简单粗暴的方式解决,就是增加Web系统的机器和升级硬件配置。虽然现在的硬件越来越便宜,但是一味地通过增加机器来解决并发量的增长,成本是非常高昂的。结合技术优化方案,才是更有效的解决方法。</p><p> 并发连接数为什么呈指数增长?实际上,从这几年的用户基数上看,这个数量并没有出现指数增长,因此它并非主要原因。主要原因,还是web变得更复杂,交互更丰富所导致的。</p><p> <strong>1. 页面元素增多,交互复杂</strong></p><p> Web页面元素越来越多,更为丰富。更多的资源元素,意味着更多的下载请求。Web系统的交互越来越复杂,交互场景和次数也大幅增加。以“www.qq.com”的首页为例子,刷新一次,大概会有244个请求。并且,在页面打开完成之后,还会有一些定时的查询或者上报请求持续运作。</p><p> <img src="http://img.ptcms.csdn.net/article/201502/12/54dc9de76dfab.jpg" /></p><p> 目前的Http请求,为了减少反复的创建和销毁连接行为,通常都建立长连接(Connection keep-alive)。一经建立,这个连接会被保持住一段时间,被后续请求复用。然而,它也带来了另一个新的问题,连接的保持是会占用Web系统服务端资源的,如果不充分使用这个连接,会导致资源浪费。长连接被创建后,首批资源传输完毕,之后几乎没有数据交互,一直到超时时间,才会自动释放长连接占据的系统资源。</p><p> <img src="http://img.ptcms.csdn.net/article/201502/12/54dc9e1a02efa.jpg" /></p><p> 除此之外,还有一些Web需求本身就需要长期保持连接的,例如Web socket。</p><p> <strong>2. 主流的本浏览器的连接数在增加</strong></p><p> 面对越来越丰富的Web资源,主流浏览器并发连接数也在增加,同一个域下,早期的浏览器一般只有1-2个下载连接,而目前的主流浏览器通常在2-6个。增加浏览器并发连接数目,在需要下载资源比较多的场景下,可以加快页面的加载速度。更多的连接对浏览器加载页面元素是有好处的,在某些连接遭遇“网络阻塞”的情况下,其他正常的下载连接可以继续工作。</p><p> 这样自然无形增加了Web系统后端的压力,更多的下载连接意味着占据了更多的Web服务器的资源。而在用户访问高峰期,自热而然就形成了“高并发”场景。这些连接和请求,占据了服务器的大量CPU和内存等资源。尤其在资源数目超过100+的网站页面中,使用更多的下载连接,非常有必要。</p><p> 二、Web前端优化,降低服务端压力在缓解“高并发”的压力,需要前端和后端的共同配合优化,才能达到最大效果。在用户第一线的Web前端,可以起到减少或者减轻Http请求的效果。</p><p> <strong>1. 减少Web请求</strong></p><p> 常用的实现方法是通过Http协议头中的expire或max-age来控制,将静态内容放入浏览器的本地缓存,在之后的一段时间里,不再请求Web服务器,直接使用本地资源。还有HTML5中的本地存储技术(LocalStorage),也被作为一个强大的数据本地缓存。</p><p> <img src="http://img.ptcms.csdn.net/article/201502/12/54dc9e77ac0c5.jpg" /></p><p> 这种方案缓存后,根本不发送请求到Web服务器,大幅降低服务器压力,也带来了良好的用户体验。但是,这种方案,对首次访问的用户无效,同时,也影响部分Web资源的实时性。</p><p> <strong>2. 减轻Web请求</strong></p><p> 浏览器的本地缓存是存在过期时间的,一旦过期,就必须重新向服务器请求。这个时候,会有两种情形:</p><p> (1)服务器的资源内容没有更新,浏览器请求Web资源,服务器回复“可以继续使用本地缓存”。(发生通信,但是Web服务器只需要做简单“回复”)</p><p> (2)服务器的文件或者内容已经更新,浏览器请求Web资源,Web服务器通过网络传输新的资源内容。(发生通信,Web服务器需要完成复杂的传输工作)</p><p> 这里的协商方式是通过Http协议的Last-Modified或Etag来控制,这个时候请求服务器,如果是内容没有发生变更的情况,服务器会返回304 Not Modified。这样的话,就不需要每次请求Web服务器都做复杂的传输完整数据文件的工作,只要简单的http应答就可以达到相同的效果。</p><p> <img src="http://img.ptcms.csdn.net/article/201502/12/54dc9e95ef4fc.jpg" /></p><p> 虽然上述请求,起到“减轻”Web服务器的压力,但是连接仍然被建立,请求也发生了。</p><p> <strong>3. 合并页面请求</strong></p><p> 如果是比较老一些的Web开发者,应该会更有印象,在ajax盛行之前。页面大部分都是直接输出的,并没有这么多的ajax请求,Web后端将页面内容完全拼凑好了,再返回给前端。那个时候,页面静态化,是一个挺广泛的优化方式。后来,被交互更友好的ajax渐渐替代了,一个页面的请求也变得越来越多。</p><p> 由于移动端的网络(2G/3G)比起PC宽带差很多,并且部分手机配置比较低,面对一个超过100个请求的网页,加载的速度会缓慢很多。于是,优化的方向又重新回到合并页面元素,减少请求数量:</p><p> (1)合并HTML展示内容。将CSS和JS直接嵌入到HTML页面内,不通过连接的方式引入。</p><p> (2)Ajax动态内容合并请求。对于动态内容,将10次Ajax请求合并为1次的批量信息查询。</p><p> (3)小图片合并,通过CSS的偏移量技术Sprites,将很多小图片合并为一张。这个优化方式,在PC端的Web优化中,也非常常见。</p><p> <img src="http://img.ptcms.csdn.net/article/201502/12/54dc9ebd822b1.jpg" /></p><p> 合并请求,减少了传输数据的次数,也就是相当于将它们从一个一个地请求,变为一次的“批量”请求。上述优化方法,到达“减轻”Web服务器压力的目的,减少了需要建立的连接。</p><p> 三、 节约Web服务端的内存前端的优化完成,我们就需要着眼于Web服务端本身。内存是Web服务器非常重要的资源,更多的内存通常意味着可以同时放入更多的工作任务。就Web服务占用内存而言,可以粗略划分:</p><p> (1)用来维持连接的基本内存,进程初始化时,会载入一些基础模块到内存。</p><p> (2)被传输的数据内容载入到各个缓冲区,占据的内存。</p><p> (3)程序执行过程中,申请和使用的内存。</p><p> 如果维持一个连接,能够尽可能少占用内存,那么我们就可以维持更多的并发连接,从而让Web服务器支持更多的并发连接数。</p><p> Apache(httpd)是一个成熟并且古老的Web服务,而Apache的发展和演变,一直在追求做到这一点,它试图不断减少服务占据的内存,以支持更大的并发量。以Apache的工作模式的演变为视角,我们一起来看看,它们是如何优化内存的问题的。</p><p> <strong>1. prefork MPM,多进程工作模式</strong></p><p> prefork是Apache最成熟和稳定的工作模式,即使是现在,仍然被广泛使用。主进程生成后,它先完成基础的初始化工作,然后,通过fork预先产生一批的子进程(子进程会复制父进程的内存空间,不需要再做基础的初始化工作)。然后等待服务,之所以预先生成,是为了减少频繁创建和销毁进程的开销。多进程的好处,是进程之间的内存数据不会相互干扰,同时,某个进程异常终止也不会影响其他进程。但是,就内存而言,每个httpd子进程占用了很多的内存,因为子进程的内存数据是复制父进程的。我们可以粗略认为,这里存在大量的“重复数据”被放在内存中。最终,导致我们能够生成的子进程最大数量是很有限。在面对高并发时,因为有不少Keep-alive的长连接,将这些子进程“霸占”住,很可能导致可用子进程耗尽。因此,prefork并不太适合高并发场景。</p><p> <img src="http://img.ptcms.csdn.net/article/201502/12/54dc9f09ce35b.jpg" /></p><p> </p><ul><li>优点:成熟稳定,兼容所有新老模块。同时,不需要担心线程安全的问题。(例如,我们常用的mod_php,将PHP编译为Apache的子模块,就不需要支持线程安全)<li>缺点:一个服务进程占用很多内存。</ul><p><strong>2. worker MPM,多进程和多线程的混合模式</strong></p><p> worker模式比起prefork,是使用了多进程和多线程的混合模式。它也预先fork了几个子进程(数量很少),然后每个子进程创建一些线程(其中包括一个监听线程)。每个请求过来,会被分配到1个线程来服务。线程比起进程会更轻量,因为线程通常会共享父进程的内存空间,因此,内存的占用会减少一些。在高并发的场景下,因为比起prefork更省内存,因此会有更多的可用线程。</p><p> <img src="http://img.ptcms.csdn.net/article/201502/12/54dc9f2617942.jpg" /></p><p> 但是,它并没有解决Keep-alive的长连接“霸占”线程的问题,只是对象变成了比较轻量的线程。</p><p> 有些人会觉得奇怪,那么这里为什么不完全使用多线程呢,还要引入多进程?因为还需要考虑稳定性,如果一个线程挂了,会导致同一个进程下其他正常的子线程都挂了。如果全部采用多线程,某个线程挂掉,就导致整个Apache服务“全军覆没”。而目前的工作模式,受影响的只是Apache的一部分服务,而不是整个服务。</p><p> 线程共享父进程的内存空间,减少了内存的占用,却又引起了新的问题。就是“线程安全”,多个线程修改共享资源导致的“竞争行为”,又强迫我们所使用的模块必须支持“线程安全”。因此,它有一定程度上增加Web服务的不稳定性。例如,mod_php所使用的PHP拓展,也同样需要支持“线程安全”,否则,不能在该模式下使用。</p><p> </p><ul><li>优点:占据更少的内存,高并发下表现更优秀。<li>缺点:必须考虑线程安全的问题,同时锁的引入又增加了CPU的开销。</ul><p><strong>3. event MPM,多进程和多线程的混合模式,引入Epoll</strong></p><p> 这个是Apache中比较新的模式,在现在的版本(Apache 2.4.10)已经是稳定可用的模式。它和worker模式很像,最大的区别在于,它解决了keep-alive场景下,长期被占用的线程的资源浪费问题。event MPM中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。它减少了“占据”连接而又不使用的资源浪费,增强了高并发场景下的请求处理能力。因为减少了“闲等”的线程,线程的数量减少,同等场景下,内存占用会下降一些。</p><p> <img src="http://img.ptcms.csdn.net/article/201502/12/54dc9f40e7349.jpg" /></p><p> event MPM在遇到某些不兼容的模块时,会失效,将会回退到worker模式,一个工作线程处理一个请求。新版Apache官方自带的模块,全部是支持event MPM的。注意一点,event MPM需要Linux系统(Linux 2.6+)对EPoll的支持,才能启用。Apache的三种模式中在真实应用场景中,event MPM是最节约内存的。</p><p> <strong>4. 使用比较轻量的Nginx作为Web服务器</strong></p><p> 虽然Apache的不断优化,减少了内存占用,从而增加了处理高并发的能力。但是,正如前面所说,Apache是一个古老而成熟的Web服务,同时,集成很多稳定的模块,是一个比较重的Web服务。Nginx是个比较轻量的Web服务,占据的内存天然就少于Apache。而且,Nginx通过一个进程来服务于N个连接。所使用的方式,并不是Apache的增加进程/线程来支持更多的连接。对于Nginx来说,它少创建了大量的进程/线程,减少了很多内存的开销。</p><p> <img src="http://img.ptcms.csdn.net/article/201502/12/54dc9f5d26fa3.jpg" /></p><p> 静态文件的QPS性能压测结果,Nginx性能大概3倍于Apache对静态文件的处理。PHP等动态文件的QPS,Nginx的做法通常是通过FastCGI的方式和PHP-FPM通信的方式完成,PHP作为一个与之无关的外部服务存在。而Apache通常将PHP编译为自己的字模块(新版的Apache也支持FastCGI)。PHP动态文件,Nginx的表现略逊于Apache。</p><p> <strong>5. sendfile节约内存</strong></p><p> Apache、Nginx等不少Web服务,都带有sendfile支持的。sendfile可以减少数据到“用户态内存空间”(用户缓冲区)的拷贝,进而减少内存的占用。当然,很多同学第一个反应当然是问Why?为了尽可能清楚讲述这个原理,我们就先回Linux内核态和用户态的存储空间的交互。</p><p> 一般情况下,用户态(也就是我们的程序所在的内存空间)是不会直接读写或者操作各种设备(磁盘、网络、终端等),中间通常用内核作为“中间人”,来完成对设备的操作或者读写。</p><p> 以最简单的磁盘读写例子,从磁盘中读取A文件,写入到B文件。A文件数据是从磁盘开始,然后载入到“内核缓冲区”,然后再拷贝到“用户缓冲区”,我们才可以对数据进行处理。写入的时候,也同理,从“用户态缓冲区”载入到“内核缓冲区”,最后写入到磁盘B文件。</p><p> <img src="http://img.ptcms.csdn.net/article/201502/12/54dc9f7c5affa.jpg" /></p><p> 这样写文件很累吧,于是有人觉得这里可以跳过“用户缓冲区”的拷贝。其实,这就是MMP(Memory-Mapping,内存映射)的实现,建立一个磁盘空间和内存的直接映射,数据不再复制到“用户态缓冲区”,而是返回一个指向内存空间的指针。于是,我们之前的读写文件例子,就会变成,A文件数据从磁盘载入到“内核缓冲区”,然后从“内核缓冲区”复制到B文件的“内核缓冲区”,B文件再从”内核缓冲区“写回到磁盘中。这个过程,减少了一次内存拷贝,同时也少内存占用。</p><p> <img src="http://img.ptcms.csdn.net/article/201502/12/54dca052cc655.jpg" /></p><p> 好了,回到sendfile的话题上来,简单的说,sendfile的做法和MMP类似,就是减少数据从”内核态缓冲区“到”用户态缓冲区“的内存拷贝。</p><p> 默认的磁盘文件读取,到传输给socket,流程(不使用sendfile)是:</p><p> <img src="http://img.ptcms.csdn.net/article/201502/12/54dca0696adfd.jpg" /></p><p> 使用sendfile之后:</p><p> <img src="http://img.ptcms.csdn.net/article/201502/12/54dca07b7cd7a.jpg" /></p><p> 这种方式,不仅节省了内存,而且还有CPU的开销。</p><p> 四、节约Web服务器的CPU对Web服务器而言,CPU是另一个非常核心的系统资源。虽然一般情况下,我们认为业务程序的执行消耗了我们主要CPU。但是,就Web服务程序而言,多线程/多进程的上下文切换,也是比较消耗CPU资源的。一个进程/线程通常不能长期占有CPU,当发生阻塞或者时间片用完,就无法继续占用CPU,这个时候,就会发生上下文切换,CPU时间片从老进程/线程切换到新的。除此之外,在并发连接数目很高的场景下,对这些用户建立的连接(socket文件描述符)状态的轮询和检测,也是比较消耗CPU的。</p><p> 而Apache和Nginx的发展和演变,也在努力减少CPU开销。</p><p> <strong>1. Select/Poll(Apache早期版本的I/O多路复用)</strong></p><p> 通常,Web服务都要维护很多个和用户通信的socket文件描述符,I/O多路复用,其实就是为了方便对这些文件描述符的管理和检测。Apache早期版本,是使用select的模式,简单的说,就是将这些我们关注的socket文件描述符交给内核,让内核告诉我们,那些描述符可操作。Poll与select原理基本相同,因此放在一起,它们之间的区别,就不赘叙了哈。</p><p> select/poll返回的是一个我们之前提交的文件描述符集合(内核将其中可读、可写或者异常状态的socket文件描述符的标识位修改了),我们需要通过轮询检查才能获得我们可以操作的文件描述符。在这个过程中,不断重复执行。在实际应用场景中,大部分被我们监控的socket文件描述符,都是”空闲的“,也就是说,不能操作。我们对整个集合轮询,就是为了找了少部分我们可以操作的socket文件描述符。于是,当我们监控的socket文件描述符越多(用户并发连接数越来越多),这个轮询工作,也就越来越沉重,进而导致增大了CPU的开销。</p><p> <img src="http://img.ptcms.csdn.net/article/201502/12/54dca09e980c3.jpg" /></p><p> 如果我们监控的socket文件描述符,几乎都是”活跃的“,反而使用这种模式更合适一点。</p><p> <strong>2. Epoll(新版的Apache的event MPM,Nginx等支持)</strong></p><p> Epoll是Linux2.6开始正式支持的I/O多路复用,我们可以理解为它是对select/poll的改进。首先,我们同样将我们关注的socket文件描述符集合告诉给内核,同时,给它们注册”回调函数“,如果某个socket文件准备好了,就通过回调函数通知我们。于是,我们就不需要专门去轮询整个全量的socket文件描述符集合,直接可以得到已经可操作的socket文件描述符。那么,那些大部分”空闲“的描述符,我们就不遍历了。即使我们监控的socket文件描述越来越多,我们轮询的也只是”活跃可操作“的socket文件描述符。</p><p> <img src="http://img.ptcms.csdn.net/article/201502/12/54dca0e118837_middle.jpg" /></p><p> 其实,有一种极端点的场景,就是我们全部文件描述符几乎都是”活跃“的,这样反而导致了大量回调函数的执行,又增加了CPU的开销。但是,就Web服务的真实场景,绝大部分时候,都是连接集合中都存在很多”空闲“连接。</p><p> <strong>3. 线程/进程的创建销毁和上下文切换</strong></p><p> 通常,Apache某一个时间内,是一个进程/线程服务于一个连接。于是,Apache就有很多的进程/线程,服务于很多的连接。Web服务在高峰期,会建立很多的进程/线程,也就带来很多的上下文切换开销。而Nginx,它通常只有1个master主进程和几个worker子进程,然后,1个worker进程服务很多个连接,进而节省了CPU的上下文切换开销。</p><p> <img src="http://img.ptcms.csdn.net/article/201502/12/54dca123dbce7.jpg" /></p><p> 两种模式虽然不同,但实际上不能直接出分好坏,综合来说,各有各自的优势,就不妄议了哈。</p><p> <strong>4. 多线程下的锁对CPU的开销</strong></p><p> Apache中的worker和event模式,都有采用多线程。多线程因为共享父进程的内存空间,在访问共享数据的时候,就会产生竞争,也就是线程安全问题。因此通常会引入锁(Linux下比较常用的线程相关的锁有互斥量metux,读写锁rwlock等),成功获取锁的线程可以继续执行,获取失败的通常选择阻塞等待。引入锁的机制,程序的复杂度往往增加不少,同时还有线程“死锁”或者“饿死”的风险(多进程在访问进程间共享资源的时候,也有同样的问题)。</p><p> 死锁现象(两个线程彼此锁住对方想要获取的资源,相互阻塞等待,永远无法达不到满足条件):</p><p> <img src="http://img.ptcms.csdn.net/article/201502/12/54dca151de829.jpg" /></p><p> 饿死现象(某个线程,一直获取不到它想要锁资源,永远无法执行下一步):</p><p> <img src="http://img.ptcms.csdn.net/article/201502/12/54dca17006d65.jpg" /></p><p> 为了避免这些锁导致的问题,就不得不加大程序的复杂度,解决方案一般有:</p><p> (1)对资源的加锁,根据约定好的顺序,大家都先对共享资源X加锁,加锁成功之后才能加锁共享资源Y。</p><p> (2)如果线程占有资源X,却加锁资源Y失败,则放弃加锁,同时也释放掉之前占有的资源X。</p><p> 在使用PHP的时候,在Apache的worker和event模式下,也必须兼容线程安全。通常,新版本的PHP官方库是没有线程安全方面的问题,需要关注的是第三方扩展。PHP实现线程安全,不是通过锁的方式实现的。而是为每个线程独立申请一份全局变量的副本,相当于线程的私人内存空间,但是这样做相对消耗多一些内存。不过,这样的好处,是不需要引入复杂的锁机制实现,也避免了锁机制对CPU的开销。</p><p> 这里顺便提到一下,经常和Nginx搭配工作的PHP-FPM(FastCGI)使用的是多进程,因此不会有线程安全的问题。</p><p> <img src="http://img.ptcms.csdn.net/article/201502/12/54dca188c2874.jpg" /></p><p> 五、 小结可能有些同学看完之后,会得出结论,Nginx+PHP-FPM的工作方式,似乎是最节省系统资源的Web系统工作方式。某种程度上说,的确是可以这么说的,但是Web系统的搭建,需要从实际业务应用的角度出发,具体问题需要具体分析,寻求最合适的技术方案。</p><p> Web服务的不断演变和发展,努力地追求用尽可能少的系统资源,来支撑更多的用户请求,这是一条波澜壮阔的前进之路。这些技术方案,汇聚了很多值得学习和借鉴的解决问题的思路。</p> 一、越来越多的并发连接数现在的Web系统面对的并发连接数在近几年呈现指数增长,高并发成为了一种常态,给Web系统带来不小的挑战。以最简单粗暴的方式解决,就是增加Web系统的机器和升级硬件配置。虽然现在的硬件越来越便宜,但是一味地通过增加机器来解决并发量的增长,成本是非常高昂的。结合技术优化方案,才是更有效的解决方法。 并发连接数为什么呈指数增长?实际上,从这几年的用户基数上看,这个数量并没有出现指数增长,因此它并非主要原因。主要原因,还是web变得更复杂,交互更丰富所导致的。 1. 页面元素增多,交互复杂 Web页面元素越来越多,更为丰富。更多的资源元素,意味着更多的下载请求。Web系… 阅读全文
YAF框架视频教程 获取链接 Facebook Twitter Pinterest 电子邮件 其他应用 发布于 八月 13, 2016 yaf框架视频教程,实训班一线讲师亲自录制,超详细的讲解,超经典的入门视频!yaf框架使用者必看!(网游评论:视频里面的广告太猛了!) [iframe]http://player.youku.com/embed/XMTQxNjk2NDUxNg==?client_id=eccfacc407819d61[/iframe] 课程目录 [float=left]1[/float]yaf介绍[float=right]00:04:56[/float] [float=left]2[/float]使用vagrant统一开发环境[float=right]00:12:20[/float] [float=left… 阅读全文
本站开启爱发电赞助,感谢支持 发布于 九月 14, 2022 本站开启爱发电赞助,欢迎三思屋的小伙伴们前来发电,以帮助我们持续的更新。 发电入口: https://go.123455.xyz/donate 对于发电的小伙伴,我们将提供本站 资源密码 一份,以表心意,感谢支持 阅读全文
升腾C30迷你小主机(可外接3.5寸硬盘刷黑群晖做NAS) 发布于 七月 13, 2022 前些天看到网络有人推荐的一款NAS小主机,原本是升腾商用端,经过商家破解BIOS后,可以作为普通小主机,推荐买1G内存+3.5寸硬盘版,到手更换4G内存,外接3.5寸硬盘,安装CentOS(或黑群晖6.17)可以作为一台低成本NAS使用 购买: 淘宝 阅读全文
日本前核电厂技师的泣血控诉 发布于 七月 22, 2017 福岛核电站前核电厂技师,设施配管1级技士平井宪夫(1997年1月因癌症逝世)生前的最后吶喊。 我不是反核运动家。这20年来,我一直在核电厂工作。社会上有听不完的拥核反核理论,但我只想在这裡告诉大家:「所谓的核电厂是这样一回事。」大部份的人都不知道核电内部的实际情形。希望大家有耐心把这篇文章读完。所谓核电,跟各位所想的或许有点出入。在那裡,每天都有遭受放射线污染的工人,以及严重的岐视產生。 我的专长,是负责大型化学工场的内部配管施工与维修。快30岁时,日本掀起了一阵核电建设的风潮。核电内部有错综复杂的配管,正好是我发挥专长的大好舞台。因此我被核电製造商挖角,长期担任工程现场的监督人员,一晃眼就过了20年。 「安全」是纸上谈兵 1995年1月发生阪神大地震。地震隔天我到了神户,看到倾倒的新干线与断裂的高速公路。不禁发起一阵省思。因為这些公共建设实在与核电厂有太多相似点。大家或许认為,核电、新干线、高速公路这些攸关人命的建设,平日应该受到政府严格控管。但是看到倒下的高架支柱,不是混凝土裡夹杂著施工初期的定型木片,不然就是焊接处焊的乱七八糟。為什麼会发生这些事呢?这不仅仅是施工单位的不用心,其实问题的本质,是我们都太过於注重「理论上的安全」了。 「素人造核电」 核电厂裡面,铁丝掉进原子炉、工具掉进配管裡卡住的人為疏失可说是层出不穷。為什麼会这样?因為工程现场裡「有真功夫的师父」实在是太少了。不管核电设计有多完美,实际施工却无法做到与原设计一模一样。核电的蓝图,总是以技术顶尖的工人為绝对前提,做出不容一丝差错的完美设计。但却从来没有人讨论过,我们的现场人员到底有没有这种能耐。 早期的工地,总是会叫经验老道的老师父来做「班长」。他们比那些年轻的监督人员有经验,并注重名誉,不允许错误发生在自己手上。但现在,老师父已几近凋零。建设公司在徵人广告上以「经验不拘」做為求才条件。这些没经验的素人,不知道核能事故的可怕,也不知道自己负责的部位有多重要。东京电力的福岛核电,曾因铁丝掉进原子炉,差点发生席卷世界的重大事故。把铁丝弄掉的工人知道自己犯了错,却完全无法想像这个错会造成如此可怕的事故。这就是现在核电现场的实际状况。 老师父一个接一个退休了。建商也查觉到这件事。因此把工程图尽量分割简化,做出连菜鸟也看的懂的製造手册。菜鸟们在现场有如堆积木般地组装 阅读全文
电话销售技巧8:如何绕过前台 发布于 三月 15, 2009 ( 11:34:26) 主持人说:这里有很多的商友开始问了这样一个问题,如何绕过前台找到真正愿意花钱买这个产品的人?很多人前台接到电话就挂掉了,如何绕过她们? ( 11:35:41) 田淑红说:那是要靠你的声音了,很多面对面的话销售人员会西装革履,也许这个公司的员工,也许就是在你这幢大楼里办公的人,那出入大门不会有人挡你,那是民工的话肯定会挡你,你在电话里面声音要是一种不会让她拒绝的人,那你要塑造成是一个部门的人,你要体现你的强势、尊贵、地位的高,其实前台小姐她是有自卑的心理,她在公司里面是最高的位置是最低的位置, ( 11:35:50) 田淑红说:其实每个领域里面他都是专家,前台小姐有自卑的心理,你声音塑造成老板,找他有些事情,她是做服务的,她会尽心尽力帮你找到号码,要找到某个人,所以其实看很多的老总,我有一次打1860,我找一个运营商的技术工程师,我忘记他的号码了,他是客户服务部的人,我打1860,我要找这个人,她说我们不知道,我说就是你们部门负责技术的,我是他朋友忘记她号码了,我说有非常急的事情找她,你让他赶紧给我回电话, ( 11:35:57) 田淑红说:那她马上就就说把我的电话记下落,马上找到之后给你回电话,那她觉得我要找的人本身是职位比她高,那我们要找人的话,如果前台能解决的话那肯定是比她们更高的人,肯定是这个人的职位比前台职位高,如果误了这个人前台小姐就失职了,那我要找这个负责人,我现在没有号码,你赶紧帮我找到,她会天哪,我无法拒绝他,要是误了这个人我怎么承担,他会觉得我不是一个骗子, ( 11:36:35) 田淑红说:那你就是说我是田淑红,我要找你们技术工程部的负责人,我忘记号码,我要号码,她说有可能说我忘记号码了,你就问大概什么时候可以查到,那她会说五分钟,那我就说可以等五分钟,你完全可以在电话里面塑造一个形象出来。 ( 11:39:02) 主持人说:田老师的声音非常甜美,如何塑造像田老师这样甜美的声音,女性业务员该具备什么样的声音,男性业务员应该具备什么样的声音? ( 11:39:11) 田淑红说:其实我是北方人,很多人都觉得我是大岔子味,我可能是打电话出来的,我做过一线电话销售,我的职业生涯决定了,没有人专门教过我声音课,我记得非常清楚,当时三个月我的声音全部哑掉,当时很恐怖,是不是我会失声了,当 阅读全文
使用dos2unix批量将CRLF转LF命令,解决跨平台换行符问题 发布于 五月 25, 2020 windows环境下的git包自带了dos2unix,直接在git bash中执行以下命令转换当前目录下的所有文件 find . -type f -print0 | xargs -0 dos2unix 阅读全文
ThinkPHP - 开源PHP框架 发布于 五月 14, 2010 ThinkPHP是一个性能卓越并且功能丰富的轻量级PHP开发框架,本身具有很多的原创特性,并且倡导 大道至简,开发由我 的开发理念,用最少的代码完成更多的功能,宗旨就是让WEB应用开发更简单、更快速。从1.*版本开始就放弃了对PHP4的兼容,因此整个框架的架构和实现能够得以更加灵活和简单。2.0版本更是在之前的基础上,经过全新的重构和无数次的完善以及改进,达到了一个新的阶段,足以达到企业级和门户级的开发标准。 ThinkPHP值得推荐的特性包括: 类库导入 :ThinkPHP是首先采用基于类库包和命名空间的方式导入类库,让类库导入看起来更加简单清晰,而且还支持冲突检测和别名导入。为了方便项目的跨平台移植,系统还可以严格检查加载文件的大小写。 URL模式 :系统支持普通模式、PATHINFO模式、REWRITE模式和兼容模式的URL方式,支持不同的服务器和运行模式的部署,配合URL路由功能,让你随心所欲的构建需要的URL地址和进行SEO优化工作。 编译机制 :独创的核心编译和项目的动态编译机制,有效减少OOP开发中文件加载的性能开销。ALLINONE模式更是让你体验飞一般的感觉。 ORM :简洁轻巧的ORM实现,配合简单的CURD以及AR模式,让开发效率无处不在。 查询语言 :内建丰富的查询机制,包括组合查询、复合查询、区间查询、统计查询、定位查询、动态查询和原生查询,让你的数据查询简洁高效。 动态模型 :无需创建任何对应的模型类,轻松完成CURD操作,支持多种模型之间的动态切换,让你领略数据操作的无比畅快和最佳体验。 高级模型 :可以轻松支持序列化字段、文本字段、只读字段、延迟写入、乐观锁、数据分表等高级特性。 视图模型 :轻松动态地创建数据库视图,多表查询不再烦恼。 关联模型 :让你以出乎意料的简单、灵活的方式完成多表的关联操作。 分组模块 :不用担心大项目的分工协调和部署问题,分组模块帮你解决跨项目的难题。 模板引擎 :系统内建了一款卓越的基于XML的编译型模板引擎,支持两种类型的模板标签,融合了Smarty和JSP标签库的思想,支持标签库扩展。通过驱动还可以支持Smarty、EaseTemplate、TemplateLite、Smart等第三方模板引擎。 AJAX支持 :内置AJAX数 阅读全文
《Git教程》廖雪峰 发布于 三月 11, 2016 史上最浅显易懂的Git教程! 为什么要编写这个教程?因为我在学习Git的过程中,买过书,也在网上Google了一堆Git相关的文章和教程,但令人失望的是,这些教程不是难得令人发指,就是简单得一笔带过,或者,只支离破碎地介绍Git的某几个命令,还有直接从Git手册粘贴帮助文档的,总之,初学者很难找到一个由浅入深,学完后能立刻上手的Git教程。 既然号称史上最浅显易懂的Git教程,那这个教程有什么让你怦然心动的特点呢? 首先,本教程绝对面向初学者,没有接触过版本控制概念的读者也可以轻松入门,不必担心起步难度; 其次,本教程实用性超强,边学边练,一点也不觉得枯燥。而且,你所学的Git命令是“充分且必要”的,掌握了这些东西,你就可以通过Git轻松地完成你的工作。 阅读: 官网 下载: Git教程.pdf 阅读全文
WinRAR 5.9.0简体中文64位版 发布于 八月 11, 2017 WinRAR 是一款用于管理压缩包文件的共享软件。 RAR 文件格式及其算法由作者 Eugene Roshal 研发,享有原创专利。 WinRAR 的“官方简体中文版”有两个版本。其中,官方英文网站和上海【袋里】商网站上所链接的版本为“上海【袋里】商合作定制版”(即所谓的“非商业个人免费版”)。该版本无论用户是否已付费注册,都会强制弹出上海【袋里】商预先指定的广告展示窗口。另一个正常的“干净”(不会强制弹出广告)的版本,则需要已注册用户通过电子邮件的形式,向 WinRAR 官方总部技术支持团队发邮件索取才能获取到。 WinRAR 的“官方繁体中文版”则没有以上问题,用户直接从官方英文网站下载安装并注册后即可让弹窗广告消失。 完全支援RAR与ZIP压缩档案,并且能解压缩CAB、ARJ、LZH、TAR,GZ、ACE、UUE、BZ2、JAR,ISO、7z 和 ZIP压缩档案。 可使用AES进行128位加密。 文件最高支持8,589,000,000TB的大小。 可以制作自解压文件。 可进行数据修复。 WinRAR可以试用40天,试用期结束后会跳出提醒视窗,但仍然可以压缩与解压缩。 试用版无法使用凭证验证。 下载: winrar-5.7.1-x64.zip | winrar-5.9.0-x64.zip | winrar-keygen-x64.zip 阅读全文
月光宝盒 - 提供网站数据备份服务 发布于 十一月 24, 2009 由月光宝盒(boxcdn.com)提供的免费网站备份服务,可用空间大小为1G,分为网站文件备份和数据库备份,网站文件采用为ftp备份,数据库备份支持mysql和sqlserver两种。备份时间可以设定为每天、每周或者每月,网站文件备份速度很快。该公司运营手续齐全,如果够诚信的话,该服务将很受站长欢迎。 注意:该网站需要您提供网站的ftp地址,密码等资料,请自己判断是否使用其备份服务。 服务申请地址: http://www.boxcdn.com 阅读全文
MD大战略2 德国闪击战 中文汉化版 发布于 十月 12, 2022 《大战略 德意志电击作战》(日语:アドバンスド大戦略 ドイツ電撃作戦,下文简称为本作),是由SystemSoft Alpha设计,移植至世嘉的Mega Drive上发行,属于移植至该电视游戏机上的大战略系列第一作。并于2006年2月22日,在Playstation 2推出了复刻版。 本作于当年的《Beep! MegaDrive Magazine》杂志中评价为1991年度的模拟游戏类第一名;在该杂志的读者评分单元(BEメガ読者レース)中平均值为8.8896分。 本作采关卡式设计,每个关卡有各自不同的过关条件,玩家操纵所属部队对作战目标进行攻击或占领,达成条件后即为过关。玩家可选择为纳粹德国的部队指挥官,或其他势力(如同盟国或轴心国)的指挥官。 本作中的分为战役模式与标准模式。战役模式主要以历史中真实发生过的战役为主,游戏内并设定了大胜(即比默认条件中提早相当日期达成)、胜利(即在默认条件的日期期限内达成),与平局(即超过了默认条件的作战达成日期的最后期限)等三种情况。以大胜过关者,将会被提前分派到后期对于玩家难度较高的地图;普通过关者,会参照历史进行下一个关卡,超过期限仍未达成者,游戏会自动重新回复至该关卡最初的状态。 游戏密技 对战国状态自由变更:载入关卡地图后,依照以下顺序:按方向键的上、上、上,之后再按C键,可叫出状态表,能自由修改金额,与兵器的开发时程表等。(标准模式) 敌方投降:载入关卡地图后,在敌国思考画面时,按住C键不放,将叫出游戏选项,于选择“降伏”将可使敌方投降。(标准模式) 下级索敌:载入关卡地图后,于“索敌”选项连续按方向键右时,可以选择下级,将变成我方可见到敌方全部行动,而敌方相反。(战役模式) 操作敌国:载入关卡地图后,于选项选择“操作”,依照以下顺序:左→右→左→右→上→上→上→上方向键,会显示错误消息,但可以操作非玩家势力。(战役模式) 编辑模式:在初始菜单输入右→左,再进入标准模式。原本的“开始”指令会变成“エディタ”(编辑)。可编辑空白地图,标准模式关卡,或是标准/战役模式存档。 德国使用核兵器:武装画面想装备德国Me264的核弹时,会出现“总统命令 禁止使用核爆弹”而无法使用。可在进入武装画面后,输入左→左→左,之后就可装备核弹。 下载: 大战略2汉化版.zip 相关: 汉化发布贴 | 全地图 | 关卡攻略 阅读全文