??xml version="1.0" encoding="utf-8" standalone="yes"?>
长连接:短连接多用于操作频繁Q点对点的通讯Q而且q接C能太多的情况。每个TCPq接的徏立都需要三ơ握手,每个TCPq接的断开要四ơ握手。如果每ơ操作都要徏立连接然后再操作的话处理速度会降低,所以每ơ操作下ơ操作时直接发送数据就可以了,不用再徏立TCPq接。例如:数据库的q接用长q接Q如果用短连接频J的通信会造成socket错误Q频J的socket创徏也是对资源的费?br>
短连接:web|站的http服务一般都用短q接。因为长q接对于服务器来说要耗费一定的资源。像web|站q么频繁的成千上万甚至上亿客L的连接用短连接更省一些资源。试惛_果都用长q接Q而且同时用成千上万的用户Q每个用户都占有一个连接的话,可想而知服务器的压力有多大。所以ƈ发量大,但是每个用户又不需频繁操作的情况下需要短q接。MQ长q接和短q接的选择要视需求而定?br>
四、发送接收方式:
1、异步:报文发送和接收是分开的,怺独立Q互不媄响的。这U方式又分两U情况:
异步双工Q接收和发送在同一个程序中Q有两个不同的子q程分别负责发送和接送?br>
异步单工Q接送和发送用两个不同的E序来完成?br>
2、同步:报文发送和接收是同步进行,x文发送后{待接送返回报文。同步方式一般需要考虑时问题Q试x们发送报文以后也不能无限{待啊,所以我们要讑֮一个等待时候。超q等待时间发送方不再{待读返回报文。直接通知时q回?br>
五、报文格式:
通信报文格式多样性更多,相应地就必须设计对应的读写报文的接收和发送报文函数?br>
d与非d方式
1、非d方式Q读函数不停的进行读动作Q如果没有报文接收到Q等待一D|间后时q回Q这U情况一般需要指定超时时间?
2、阻塞方式:如果没有接收到报文,则读函数一直处于等待状态,知道报文到达?br>
循环d方式
1、一ơ直接读写报文:在一ơ接收或发送报文动作中一ơ性不加分别地全部d或全部发送报文字节?br>
2、不指定长度循环dQ这一版发生在短连接进E中Q受|络路由{限Ӟ一ơ较长的报文可能在网l传输过E中被分解成很多个包Q一ơ读取可能不能全部读完一ơ报文,q就需要@环读取报文,知道d为止?br>
3、带长度报文头@环读写:q种情况一般在长连接中Q由于在长连接中没有条g能够判断循环d什么时候结束。必要加长度报文头。读函数先是d报文头的长度Q再Ҏq个长度去读报文Q实际情况中Q报头码制格式还l常不一P如果是非ASCII的报文头Q还必须转换成ASCII常见的报文头~制有:1、n个字节的ASCII码?、n个字节的BCD码?、n个字节的|络整型码?br>
以上是几U比较典型的d报文方式Q可以与通信方式模板一?预先提供一些典型的APId函数?br>
当然在实际问题中Q可能还必须~写与对Ҏ文格式配套的dAPI. 在实际情况中Q往往需要把我们自己的系l与别h的系l进行连接, 有了以上模板与API,可以说连接Q何方式的通信E序都不存在问题?
]]>
#include <stdlib.h>
#include <math.h>
int prime(int m)
{
int i,k;
k = (int)sqrt(m);
for(i=2; i<k; i++)
if (m % i == 0)
return 0;
return 1;
}
int main(int argc, char** argv)
{
int input = 0;
int val, ret = 0;
if (argc != 2)
{
printf("usage:find_prime num\n");
exit(-1);
}
input = atoi(argv[1]);
//printf("%d\n",input);
val = input;
//向下?br /> while (!ret)
{
ret = prime(val);
val--;
}
printf("%d\n", ++val);
//向上?br /> val = input;
ret = 0;
while (!ret)
{
ret = prime(val);
val++;
}
printf("%d\n", --val);
return 0;
}
转自好特?
www.hot818.net
]]>
0Q设有两文??
文章1的内容ؓQTom lives in Guangzhou,I live in Guangzhou too.
文章2的内容ؓQHe once lived in Shanghai.
1)׃lucene是基于关键词索引和查询的Q首先我们要取得q两文章的关键词,通常我们需要如下处理措?
a.我们现在有的是文章内容,即一个字W串Q我们先要找出字W串中的所有单词,卛_词。英文单词由于用I格分隔Q比较好处理。中文单词间是连在一L需要特D的分词处理?
b.文章中的”in? “once?“too”等词没有什么实际意义,中文中的“的”“是”等字通常也无具体含义Q这些不代表概念的词可以qo?
c.用户通常希望查“He”时能把含“he”,“HE”的文章也找出来Q所以所有单词需要统一大小写?
d.用户通常希望查“live”时能把含“lives”,“lived”的文章也找出来Q所以需要把“lives”,“lived”还原成“live?
e.文章中的标点W号通常不表C某U概念,也可以过滤掉
在lucene中以上措施由Analyzercd?
l过上面处理?
文章1的所有关键词为:[tom] [live] [guangzhou] [i] [live] [guangzhou]
文章2的所有关键词为:[he] [live] [shanghai]
2) 有了关键词后Q我们就可以建立倒排索引了。上面的对应关系是:“文章号”对“文章中所有关键词”。倒排索引把这个关pd过来,变成Q“关键词”对“拥有该关键词的所有文章号”。文?Q?l过倒排后变?
关键?文章?
guangzhou 1
he 2
i 1
live 1,2
shanghai 2
tom 1
通常仅知道关键词在哪些文章中出现q不够,我们q需要知道关键词在文章中出现ơ数和出现的位置Q通常有两U位|:a)字符位置Q即记录该词是文章中W几个字W(优点是关键词亮显时定位快Q;b)关键词位|,卌录该词是文章中第几个关键词(优点是节U烦引空间、词l(phaseQ查询快Q,lucene中记录的是q种位置?
加上“出现频率”和“出C|”信息后Q我们的索引l构变ؓQ?
关键?文章号[出现频率] 出现位置
guangzhou 1[2] 3Q?
he 2[1] 1
i 1[1] 4
live 1[2],2[1] 2Q?Q?
shanghai 2[1] 3
tom 1[1] 1
以live q行Z我们说明一下该l构Qlive在文?中出C2ơ,文章2中出C一ơ,它的出现位置为?,5,2”这表示什么呢Q我们需要结合文章号和出现频率来分析Q文?中出C2ơ,那么?,5”就表示live在文?中出现的两个位置Q文?中出C一ơ,剩下的?”就表示live是文?中第 2个关键字?
以上是lucene索引l构中最核心的部分。我们注意到关键字是按字W顺序排列的Qlucene没有使用B树结构)Q因此lucene可以用二元搜索算法快速定位关键词?
实现?lucene上面三列分别作典文ӞTerm DictionaryQ、频率文?frequencies)、位|文?(positions)保存。其中词典文件不仅保存有每个关键词,q保留了指向频率文g和位|文件的指针Q通过指针可以扑ֈ该关键字的频率信息和位置信息?
Lucene中用了field的概念,用于表达信息所在位|(如标题中Q文章中Qurl中)Q在建烦引中Q该field信息也记录在词典文g中,每个关键词都有一个field信息(因ؓ每个关键字一定属于一个或多个field)?
Z减小索引文g的大,Lucene对烦引还使用了压~技术。首先,对词典文件中的关键词q行了压~,关键词压~ؓ<前缀长度Q后~>Q例如:当前词ؓ“阿拉伯语”,上一个词为“阿拉伯”,那么“阿拉伯语”压~ؓ<3Q语>。其ơ大量用到的是对数字的压~,数字只保存与上一个值的差|q样可以减小数字的长度,q而减保存该数字需要的字节敎ͼ。例如当前文章号?6389Q不压羃要用3个字节保存)Q上一文章h16382Q压~后保存7Q只用一个字节)?
下面我们可以通过对该索引的查询来解释一下ؓ什么要建立索引?
假设要查询单?“live”,lucene先对词典二元查找、找到该词,通过指向频率文g的指针读出所有文章号Q然后返回结果。词兔R常非常,因而,整个q程的时间是毫秒U的?
而用普通的序匚w法Q不建烦引,而是Ҏ有文章的内容q行字符串匹配,q个q程会相当~慢Q当文章数目很大Ӟ旉往往是无法忍受的?br />
]]>
1、利用超囄GISpȝ作二ơ开发,后来Z某些原因中途离开了,但学C不少东西?br />
2、ؓq接学校评估Q用PHPl学院开发了一个内容管理系l,当时?个h开发这个系l,长了不少目开发经验,体会C团队合作的重要性。项目最后是完美的交付给学校Q初ơ体会到成功的喜悦,至今让h怀c?br />
3?007q?月䆾C武汉Q开始从事linux下的C语言开发,从此关注一些系l底层的开发以及算法,到目前应该说单就C语言开发也1q有余了吧。工作经验有Q?br /> 用到各种法和数据结构,对网l上的数据进行处理。要可能的提高处理的效?br /> 独自l护一?万多行代码的目Qƈ对这个项目做了重大改版,亲手写的代码量应该有5千行以上吧,q在必要时解{客L疑问?br /> 对于q个目新添加的功能的设计工作都是由自己来完成,包括处理程Q数据结构,以及数据库的设计?br /> 学习C丰富的linux下的开发经验及相关理论知识Q如U程~程Q内存池的运用,q程间的通信QMakefile的编写,shell的运用?br /> 有了丰富的调试经验,能熟l的q用gdb对程序进行调试,调试q段错误Q多U程中的d@环,死锁问题。煅g解决问题的能力?br />
qx也会抽出旉看了一些经典技术书c?如《Write Clean Code?br />