AR+手工艺:这款 AR 工具让你一秒变鲁班 获取链接 Facebook X 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 X Pinterest 电子邮件 其他应用 发布于 八月 23, 2016 <p><img src="https://static.ktsee.com/s1/2016/08/20160823141529636.jpg" /></p> 阅读全文
纯PHP下 Mysql PDO 使用方法小记 获取链接 Facebook X Pinterest 电子邮件 其他应用 发布于 八月 19, 2016 1 配置信息 $config = array( 'db' => array( 'host' => '127.0.0.1', 'user' => 'root', 'pass' => '', 'db' => 'test_db', 'dns' =>… 阅读全文
物联网相关web技术 获取链接 Facebook X Pinterest 电子邮件 其他应用 发布于 八月 18, 2016 找了一下一些常用的物联网相关的Web技术,整理如下。 REST REST不论是在HTTP协议中,还是在CoAP中都是常用的技术之一,虽然说不上是技术,但是常用是有的。 REST从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的 应用通过URI来获取资源的表征。获得这些表征致使这些应用程序转变了其状态。随着不断获取资源的表征,客户端应用不断地在转变着其状态,所谓表征状态转移。 记得我在写毕业论文的时候这样写到: REST服务实际上是充当着网络与设备的传输介质,构建一个REST服务也就相当于 获取一个URL下的某个数据。 需要注意的是,这里最后关注的还是M2M的思想,写给机器的… 阅读全文
反恐精英CS 1.6 精简中文版 获取链接 Facebook X 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 X 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 X 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… 阅读全文
随身WiFi折腾指南: 解锁、刷机与DIY 发布于 五月 29, 2023 市面上随身Wifi的产品层出不穷,我也入手了两个,记录一下折腾的步骤。 目前较多的是中兴微和高通骁龙410两个版本,对于只是想插自己的卡的用户,推荐购买中芯微芯片轻型Linux系统的随身wifi,因为这种产品在稳定性和发热量方面表现较好,无需额外折腾;如果用户想搞机,推荐购买高通骁龙410纸盒系列的随身wifi,这种产品拥有很高的可玩性,可以刷出各种不同的操作系统或软路由等,相对灵活。 拿到手根据以下步骤折腾: 1. 解锁sim卡槽密码 获取解锁sim卡槽密码,这是进行手机解锁操作所必要的步骤之一 http://192.168.0.1/goform/goform_get_cmd_process?cmd=unlock_network_code 2. 移除商家远控后台 开启ADB命令。该命令通常用于与手机进行调试和控制 http://192.168.0.1/goform/goform_set_cmd_process?goformId=SET_DEVICE_MODE&debug_enable=1 当用户使用`nv`命令时,表示正在修改或查询机器的某些固件参数。以下是对所有出现的`nv`命令的解释: - `nv show`:查看所有可设置的参数; - `nv set mqtt_host=127.0.0.1`:将 MQTT 服务器的主机地址设置为本地; - `nv set fota_updateMode=0`:禁止自动下载固件更新; - `nv set os_url=http://127.0.0.1`:将系统软件更新服务器的地址设置为本地; - `nv set lpa_trigger_host=127.0.1`:将选定的服务地址设置为本地; - `nv set safecare_hostname=127.0.0.1`:将 Safecare 服务器的主机地址设置为本地; - `nv set safecare_mobsite=http://127.0.0.1`:将手机站点地址设置为本地; - `nv set TM_SERVER_NAME=127.0.0.1`:将 TM 服务器的主机地址设置为本地; - `nv set lpa_trigger_updata_url=/`:将选定的服务地址设置为根目录; - `nv set lpa_trigger_event_url=/`:将... 阅读全文
解决Ubuntu桌面上Free Download Manager无法打开的问题 发布于 十一月 01, 2024 在 Ubuntu Desktop 24.04 LTS 上安装 Free Download Manager 后,点击其图标时程序无法打开。这个问题通常与 Ubuntu 系统更新后的兼容性有关。 新的 Ubuntu 更新可能会影响 Free Download Manager 的某些安全功能,例如 SSL 和 TLS。 解决方法是安装 `libxcb-cursor0`。请在终端中运行以下命令: sudo apt install libxcb-cursor0 阅读全文
Cromite - 极度注重隐私的Chromium浏览器 发布于 十月 14, 2024 Cromite 是基于Bromite的Chromium分支,具有内置的广告拦截支持和隐私保护功能。 Cromite 适用于 Android arm64-v8a、arm32-v7a 和 x86_64、Nougat 及更高版本(最低 v8.0,API 级别 26)、Windows 和 Linux 64 位。 Cromite的目标是 限制浏览器内置的可用作跟踪用户习惯平台的功能,如果技术上不可行,则禁用它们并让用户选择是否重新启用它们 限制浏览器与其制造商之间的紧密结合 在具体的使用过程中,我发现确实能最大程度的保证隐私,甚至出现我在NoVNC中按Ctrl+C不能复制内容的情况(估计是拦截了可能出现的按键泄露风险)。所以我的结论是,如果为了极度注重隐私,可以考虑这款浏览器。而普通的用户,也许Chromium或另一款Thorium更值得尝试。 下载页:https://github.com/uazo/cromite/releases 阅读全文
静下来学习,放松方式资源推荐 发布于 十一月 04, 2015 如果你想,学习在线课程 edX——在线学习世界上最顶尖大学的精品课程。 www.edx.org/ Coursera——学习世界上最好的课程,在线并且免费的哦~ www.coursera.org Coursmos——随时随地在任何电子设备上,学习微课程。 www.coursmos.com Highbrow——每天向你的邮箱发送可以轻松消化的微课程。 www.gohighbrow.com/ Skillshare——通过在线课堂和项目,释放你的创造力。 www.skillshare.com Curious——通过在线视频课程来提升你的技能。 curious.com Lynda——学习科技,创意和商业技能。 www.lynda.com/ CreativeLive——从世界顶尖的专家那里免费学习创意课程。 www.creativelive.com Udemy——在线学习现实世界的技能。 www.udemy.com 如果你想,学习如何编程 Codecademy——免费学习交互式编程(很赞) www.codecademy.com Stuk.io——从零开始学习编程。 https://stuk.io/ Udacity——获得受大公司认可的微学历。 www.udacity.com/ Platzi——关于设计,营销和编程的流媒体在线直播课程。 https://platzi.com/ Learnable——学习网络开发的最好方式。 https://learnable.com/home Code School——即刻动手学习编程。 www.codeschool.com/ Thinkful——通过1对1的辅导来拓展职业生涯。 www.thinkful.com/ Code.org——通过简单的教程来开始学习。 http://code.org/ BaseRails——掌握Ruby on Rails和其他网络开发技术。 www.baserails.com Treehouse——学习HTML,CSS,iPhone apps和更多编程语言。teamtreehouse.com One Month——一个月学会编程和网络应用开发。 https://onemonth.com Dash——学做酷炫的网站。 http... 阅读全文
史蒂夫 乔布斯Steve.Jobs在2005年对斯坦福大学Stanford毕业生的演讲(中英字 幕) 发布于 九月 05, 2011 [flash]http://player.youku.com/player.php/sid/XMjQ4MzkwMjIw/v.swf[/flash] 阅读全文
如何做好个人防疫? 发布于 十二月 05, 2022 最近很多人问我,要怎么做好个人防护。 今天文章我就大致来聊聊这件事情。 首先,大家需要明白一件事情,在放开之后,要想永远不得新冠,是不太现实的事情。 虽然当前国外,还是有一些积极做好个人防疫的人,运气比较好,也还没有感染新冠。 但只要你还要跟社会接触,那么以奥密克戎的传染性,感染只是一个时间问题。 但这里最关键的一个概念是,尽量不要短时间内多次重复感染。 我跟大家说过很多次。 一年内重复感染三五次的人,其身体健康大概率是不如一年只感染一次的人。 短时间内重复感染次数越多,对人体免疫系统的负担越大,更容易造成人体免疫力下降。 所以,我们积极做好个人防护,目标是尽量不感染,一年最多只感染一次奥密克戎。 这个我认为是有可能做到的。 我们对于感染新冠,不用恐慌。 我一直跟大家强调,奥密克戎是对“个体威胁低”,但对“整体威胁大”。 在打了三针疫苗的前提下,奥密克戎的死亡率是已经降低十倍以上,只有千分之2左右。 所以,绝大多数年轻人感染新冠后,不会有什么事情。 但这个死亡率,只要乘以14亿人,仍然是一个很严峻的数字。 此外,根据世界卫生组织的数据,感染者出现长新冠的概率是10%-20%。 但其中80%的人,都会在一个月内自行恢复,长新冠症状消失。 新冠感染者出现超过三个月长新冠症状的概率大约为3%。 因为英国目前有200万人是出现超过三个月的长新冠,占英国总人口3%左右。 所以,绝大多数人也不会出现长新冠,但有小概率的人,出现长新冠后,症状会持续超过三个月。 英国长新冠症状超过三个月的患者里,有一半是长新冠症状超过一年。 所以,我们不要觉得奥密克戎就是一个流感,得了也没事。 我们对奥密克戎,可以总结几个原则: 1、能不感染,尽量不感染。 2、假如感染,不要恐慌,大概率会没事,理性应对即可。 3、能少感染几次,尽量少感染几次。 基于这些原则,我们要怎么做好个人防护。 (1)出门要戴好口罩 首先出门一定要戴口罩。 现在不少人,轻信所谓奥密克戎不过就是流感,开始轻敌,出门也不戴口罩,整天往人群密集的室内环境扎堆。 这样轻视的人越多,那么这个冬天我们需要付出的代价就会越大。 所以,出门要带口罩,这是保护自己,也是保护家人,也是保护他人,是最基本的责任体现。 现在是冬天,出门带个口罩,并不会给人带来多大不便。 但我们如果每个月都能出门带好口罩,可能就会挽救很多本来可能超额死亡的生命。 那... 阅读全文
微软必应拼音输入法1.6.302.06 发布于 七月 09, 2019 微软必应输入法是基于微软亚洲研究院开发的中文输入引擎和多项研究成果并集成了搜索体验的中文云输入法。它是由英库拼音输入法于2013年4月8日更名而来,从此成为必应软件中心的一员。它保留了英库输入法的自然语言处理、中文计算、搜索引擎、机器翻译等功能,并集成了必应搜索体验、引入输入法应用开放平台。 一些中国大陆用户认为,比起 QQ输入法、搜狗输入法等内地主流拼音输入法,该输入法在核心上的创新值得肯定,不过一些细节体验仍需完善。当前已经停止更新,截至2018年6月19日,官网无法访问。 下载: BingPinyin_1.6.302.06.zip 阅读全文
javascript判断dom是否隐藏(display:none)状态 发布于 十月 11, 2017 var isHidden = function(element) { return (element.offsetParent === null); }; 如果是通过设置visibility:hidden则无法检测出,这时可以用以下方法代替(但是性能会差一些): function isHidden(el) { var style = window.getComputedStyle(el); return (style.display === 'none') } 如果使用jQuery,则有比较方便的方法: if($('div').is(':visible') == true) { // 隐藏 } if($('div').is(':visible')) { } if($('div').is(':hidden') == true) { // 显示 } if($('div').is(':hidden')) { } 阅读全文
90个你不知道的冷门知识及精彩点评 发布于 十二月 18, 2009 1.看看你的拉链,如果上面有YKK三个字母,那么说明这是全球最大的拉链制造商Yoshida Kogyo Kabushibibaisha的产品 【点评】这算什么,如果看见“Made In Waiguo”,那也是世界最大的成衣生产商们制造的。 2.麦当劳40%的利润来自Happy Meals的销售 【点评】中石油A股的利润100%来自股民。 3.1996版的韦伯斯特词典有315处拼写错误 【点评】所以中国设立了315消费者日。 4.每天平均有12个新生儿被交给错误的父母 【点评】现在,知道为什么星座预测达不到100%的准确了吧?所以,别大声嚷嚷“不准”。 5.巧克力对于狗来说是致命的,只要几盎斯就可以使一只小狗,因为心脏和神经系统受损而死亡。 【点评】只需要0.1盎司的野山椒涂在猫屁股上,它就能立即变成毛线球。 6.19世纪30年代番茄酱是作为药品来销售的 【点评】我算是知道为什么**里经常有番茄酱了。 7.达芬奇可以一手写字,同时另一手作画 【点评】达芬奇的IQ超过150,但是,会左右互搏的郭靖只有75。费那劲干啥? 8.剪刀是达芬奇发明的 【点评】那么,张小泉是怎么认识达芬奇的? 9.描绘蒙娜丽莎的嘴唇花费了达芬奇10年的时间 【点评】为了亲第一个姑娘的嘴,我等了18年。 10.二战期间颁发的奥斯卡奖座是木制的,因为当时金属是稀缺物资 【点评】那么,当时的汽车也是木头的吗? 11.拉斯维加斯的赌场都没有钟 【点评】所有热恋的人和发言的领导都没有表。 12.李小龙的动作非常快,快到看不清,所以拍电影时只好放慢胶片的速度 【点评】所以,李小龙是蜂鸟。 13.仰面躺着并缓缓地抬起双腿,可以免于陷入流沙之中 【点评】抬起双腿的话,身子靠在哪里用力? 14.驱蚊水并不驱蚊而是干扰蚊子的感觉器官,这样它们就找不到人在哪里。 【点评】女生擦香水也并是为了愉悦你的鼻子。 15.牙医建议,牙刷应放置于距离盥洗室至少6英尺远,以避开冲马桶时产生并漂浮于空气中的各种微粒 【点评】这种房子在北京应该过百万吧? 16.最早被打上条形码的产品是箭牌口香糖 【点评】绝对是错的,怎么不说斑马呢? 17.迈克尔.乔丹每年从耐克得到的收入多于马来西亚的耐克工厂工人的薪水总和 【点评】作协应该最爱马来西亚工人... 阅读全文
仿13580个性导航PHP版 发布于 十月 04, 2009 13580是由52个格子组成的网页。每个格子您都可以个性化的设置它的图标、名称、指向地址,简单的说就是您每天常去的网站的集合,您可以随意增加或删除您的网站收藏,个性化您的页面图标摆放等功能。 功能: 目前只支持以下内容: 分为Rss订阅列表和书签两部分。 书签包括:系统(常用网址,在线广播,搜索模块,Rss订阅,以及小组件),也可以用户自己添加。 用户个性域名添加。 整图上传功能。 桌面格子连连看游戏。 说明: 当时为了速度开发,没有自己写框架,直接拿来uchome搞了二次开发,由于开发时间短(不到20天(每天2~3小时)),所以没有考虑到性能方面,如果以后更新的话,会把程序独立出来!或者有喜欢的朋友,可以一起开发! 官方帮助视频: [flash]http://www.13580.com/help_nm.swf[/flash] 下载: f13580.rar (f13580.rar) link 阅读全文