编程

线程安全与可重入函数

线程安全:一个函数被称为线程安全的(thread-safe),当且仅当被多个并发进程反复调用时,它会一直产生正确的结果。如果一个函数不是线程安全的,我们就说它是线程不安全的(thread-unsafe)。我们定义四类(有相交的)线程不安全函数。

第1类:不保护共享变量的函数…

什么是代码现代化?

现代高性能计算机由下列资源组合构建而成:多核处理器(/zh-cn/articles/frequently-asked-questions-intel-multi-core-processor-architecture#_Essential_concepts)、众核处理器(http://goparallel.sourceforge.net/ask-james-reinders-multicore-vs-manycore/)、大型高速缓存,高带宽进程间通信结构和高速 I/O 功能。 高性能软件需经过设计,以充分利用这些丰富的资源。 无论是重新构建并/或调优现有应用以发挥最高性能,或为现有或未来设备构建新应用,了解编程模型和高效利用资源之间的相互作用极其关键。 以此为起点,全面了解代码现代化(/zh-cn/moderncode)。 关于性能,您的代码至关重要!…

Websocket详细讲解(基础篇一)

因为websocket的内容比较多,所以准备分解将基础篇主要讨论一下websocket的概念,websocket和http协议的区别,客户端的websocket以及服务端的websocket,中间穿插着一些实例,最后以一个基本的实例还结束基础篇。扩展篇讨论一下nodejs中socket及其应用。下面我们就来进入正式话题…

基于内容推荐的个性化新闻阅读实现

这一直是本人想做的一个项目,缘由是现在的信息越来越多,越来越廉价,所以我必须想办法能自动挑出我感兴趣的文章,而不是一打开订阅邮箱堆积着好多好多的订阅文章,想要消化这些文章又不知哪里下手。其实以前好像看到说,Twitter已经着手研究这类问题,今后可能Twitter信息将按照用户的喜好程度,而不是时间排序展列了,国内低效著称的某浪不知道有没有着手这方面的研究,还是坐等着山寨呢?
同时,国内的今日头条算是当前最大的移动端信息聚合平台了,之前使用见他每个文章都有好几个TAG,所以不知道他的推荐算法是不是简单基于标签计算的。之前的推荐算法介绍…

再见,CSRF:讲解set-cookie中的SameSite属性

SameSite-cookies是一种机制,用于定义cookie如何跨域发送。这是谷歌开发的一种安全机制,并且现在在最新版本(Chrome Dev 51.0.2704.4)中已经开始实行了。SameSite-cookies的目的是尝试阻止CSRF(Cross-site request forgery 跨站请求伪造)以及XSSI(Cross Site Script Inclusion (XSSI) 跨站脚本包含)攻击。详细介绍可以看这一篇文章(https://tools.ietf.org/html/draft-west-first-party-cookies-06)。…

Websocket原理及使用场景

WebSocket的使用场景

社交聊天、弹幕、多玩家游戏、协同编辑、股票基金实时报价、体育实况更新、视频会议/聊天、基于位置的应用、在线教育、智能家居等需要高实时的场景

由轮询到WebSocket

1 轮询

客户端和服务器之间会一直进行连接,每隔一段时间就询问一次。客户端会轮询,有没有新消息。这种方式连接数会很多,一个接受,一个发送。而且每次发送请求都会有Http的Header,会很耗流量,也会消耗CPU的利用率。

2 长轮询

长轮询是对轮询的改进版,客户端发送HTTP给服务器之后,有没有新消息,如果没有新消息,就一直等待。当有新消息的时候,才会返回给客户端。在某种程度上减小了网络带宽和CPU利用率等问题。但是这种方式还是有一种弊端:例如假设服务器端的数据更新速度很快,服务器在传送一个数据包给客户端后必须等待客户端的下一个Get请求到来,才能传递第二个更新的数据包给客户端,那么这样的话,客户端显示实时数据最快的时间为2×RTT(往返时间),而且如果在网络拥塞的情况下,这个时间用户是不能接受的,比如在股市的的报价上。另外,由于http数据包的头部数据量往往很大(通常有400多个字节),但是真正被服务器需要的数据却很少(有时只有10个字节左右),这样的数据包在网络上周期性的传输,难免对网络带宽是一种浪费。

3  WebSocket

现在急需的需求是能支持客户端和服务器端的双向通信,而且协议的头部又没有HTTP的Header那么大,于是,Websocket就诞生了!流量消耗方面,相同的每秒客户端轮询的次数,当次数高达数万每秒的高频率次数的时候,WebSocket消耗流量仅为轮询的几百分之一

WebSocket协议原理

Websocket是应用层第七层上的一个应用层协议,它必须依赖 HTTP 协议进行一次握手 ,握手成功后,数据就直接从 TCP 通道传输,与 HTTP 无关了。

Websocket的数据传输是frame形式传输的,比如会将一条消息分为几个frame,按照先后顺序传输出去。这样做会有几个好处:

1 大数据的传输可以分片传输,不用考虑到数据大小导致的长度标志位不足够的情况。

2 和http的chunk一样,可以边生成数据边传递消息,即提高传输效率。…

Libevent内部实现原理初探

Libevent确实方便了开发人员,对于定时器、信号处理、关心的文件或者套接字,只需要挂载到event_base上面,设置好对应的回调函数和参数就可以了,当对应的事件发生时,Libevent会自动调度相应的回调函数进行处理。
本文就按照之前在sshinner(https://github.com/taozhijiang/sshinner)中使用Libevent的过程,以这些接口函数作为突破点,沿着代码走了一朝,尝试探究一下Libevent的内部工作流程是怎样的。由于本人能力有限,有些东西可能不够详尽或者准确,还望不吝指出。…

四种框架分别实现百万websocket常连接的服务器

事实上,最近我又增加了几个框架,现在包括 Netty, Undertow, Jetty, Spray, Vert.x, Grizzly 和 Node.js七种框架。
测试数据可以看下一篇文章: 七种WebSocket框架的性能比较

著名的 C10K 问题提出的时候, 正是 2001 年。这篇文章可以说是高性能服务器开发的一个标志性文档,它讨论的就是单机为1万个连接提供服务这个问题,当时因为硬件和软件的限制,单机1万还是一个非常值得挑战的目标。但是时光荏苒,随着硬件和软件的飞速发展,单机1万的目标已经变成了最简单不过的事情。…

软件开发需要编写哪些文档

如今,软件开发越来越复杂,软件的功能也越来越丰富。而几乎所有成熟的商业软件,都是一个开发团队齐心协力的血汗结晶。”罗马不是一天建成的。”,当我们震撼于Microsoft Windows的惊世巨著的同时,也道听途说了一些微软公司软件工程是如何的完善和规范。软件项目管理的成败是控制开发成本的关键环节。这里面,少不了贯穿其中的重要步骤软件文档。 …

第 4 页,共 16 页« 最新...23456...10...最旧 »