摘要:
一、Memcached概念: memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用... 阅读全文
摘要:
标准库函数bind()和function()定义于头文件中(该头文件还包括许多其他函数对象),用于处理函数及函数参数。bind()接受一个函数(或者函数对象,或者任何你可以通过”(…)”符号调用的事物),生成一个其有某一个或多个函数参数被“绑定”或重新组织的函数对象。(译注:顾名思义,bind()函... 阅读全文
摘要:
###指针和引用的区别1. 指针是一个变量,存储了指向数据的地址;引用只不过是原变量的别名,实质上跟原变量是一回事2. 指针可以多级,引用只能有一级3. 指针可以为NULL,引用不能为空,创建时就必须初始化4. 指针可以用const,但是引用没有const //应该改为指针可以有两层co... 阅读全文
摘要:
让服务器在启动阶段调用fork创建一个子进程池,通过子进程来处理客户端请求。子进程与父进程之间使用socketpair进行通信(为了方便使用sendmsg与recvmsg,如果使用匿名管道,则无法使用以上两个函数)。以下针对TCP进行分析。server端使用select轮询用于监听客户端请求的被动套... 阅读全文
摘要:
1. 信号处理问题 对于相同信号,按信号的先后顺序依次处理。可能会产生的问题是,正在处理sig1信号时,又来了2个或更多的sig1信号,此sig1时只会在处理完原来的sig1信号后,再处理1个sig1信号。因此对于相同信号,会产生信号掉包的问题。 一个儿子退了之后,程序在处理handler(),如果 阅读全文
摘要:
思路 主线程负责发送消息,另一线程负责接收消息。服务端和客户端均是如此。 注意 当A方close掉用于通信的socket端口后,该端口是不会立即关闭的。因为此时可能B方的信息还没send完。因此,此时A方的recv仍旧处于阻塞状态,会最后再等待收一次信息。此时,当B方send一个信息给A后,A方re 阅读全文
摘要:
1. server端维护一个链表,用于存放客户端的联系方式。结构如下: typedef struct sockaddr_in SA ; typedef struct client_tag { SA ct_addr; struct client_tag* ct_next; }CNODE, *pcNOD 阅读全文
摘要:
数据存储优先顺序的转换 计算机数据存储有两种字节优先顺序:高位字节优先(称为大端模式)和低位字节优先(称为小端模式)。内存的低地址存储数据的低字节,高地址存储数据的高字节的方式叫小端模式。内存的高地址存储数据的低字节,低地址存储数据高字节的方式称为大端模式。 eg:对于内存中存放的数0x123456 阅读全文
摘要:
客户端将需要解决的task发送给服务器,服务器调用线程来解决客户端发送的task,解决完由线程负责将其发送回客户端。(用管道实现通信) 1. server维护两个列表。一是客户端列表。二是任务列表。分别如下: /* 客户端列表 */ typedef struct tag_fds { int s_rf 阅读全文
摘要:
条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待条件变量的条件成立而挂起(此时不再占用cpu);另一个线程使条件成立(给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。 /* 等待条件 */ /* 注意:pthread_cond_wait 阅读全文