首页 > 技术文章 > 进程线程

countryboy666 2019-06-06 07:29 原文

select系统调用的的用途是:在一段指定的时间内,监听用户感兴趣的文件描述符上可读、可写和异常等事件
信号量和互斥锁(mutex)的区别:互斥锁只允许一个线程进入临界区,而信号量允许多个线程同时进入临界区。
临界资源:具有排他性的资源,同一个存储空间进行读写的代码区.

僵死进程: 子进程退出时,父进程没有对其进行处理,导致子进程停留在僵死状态等待父进程对其收尸..
如何处理僵死进程: 当父进程退出后,僵死进程变化层孤儿进程,会被系统中管理孤儿进程的进程收养,并清理.
临界区:访问临界资源的代码段

信号量的本质就是计数器
标准概念:进程同步也是进程之间直接的制约关系,是为完成某种任务而建立的两个或多个线程,这个线程需要在某些位置上协调他们的工作次序而等待、传递信息所产生的制约关系。进程间的直接制约关系来源于他们之间的合作。
进程间的信号量: 1个id可同时分别操作多个信号量,对信号的加减没有限定
线程间信号:1个id就一个信号量,每次只能加减1个信号的值


可等线程:线程退出时,主线程必须接受他的返回码,否则就占用资源不释放,可调pthread_join接受
脱离线程是,主线程不理会返回值

线程就是一个函数执行体,函数的参数就可以实现数据的传输

TCP 和UDP的区别:
1 传输控制协议,有链接,可靠的字节流,数据丢失重传机制,
2 数据报协议,无链接的,不可靠的数据包传输,并可实现广播和组播,可在应用层上实现丢失重传.

有链接的单薄: 通过描述符进行数据的接受
无链接的单播: 有时会受到垃圾信息
无链接的广播: 全子网发送广播
无链接得多播: 加入多播组接受多播数据

心跳机制:
int life;
while(1) //主线程
{
sendto(ok);
sleep(5);
life--;
if(life <0)
puts("error")
}

while(1)
{

recv();
if(buffer =="ok")
{
life++;
}
}

while(1)
{

recv(sock,buf);
if(buffer == "ok")
{
sed("ok")
}
}

 

计算机联网过程:
1计算机广播自己的mac
2 交换机记录mac,并广播所有端口
3 其他计算机无视丢弃
4 路由器分发IP,DNS,MASK,GATEWAY等信息
5 交换机转发这条信息到端口
6 计算机收到DHCP的数据,设置网卡信息

登录qq
1 登录消息->wifi->路由器
2 路由器分析目标ip和端口
3 路由器用NET协议分配端口,用internet 地址替换局域网的源地址和端口 并记录 发数据
4 路由器接受数据,查找NET表,把目标端口替换成局域网地址和端口 -->计算机

 


memcpy(void *dest,void *src,int count)
{
if(dest == NULL|| src==NULL)
{
return NULL;

}

char* pdest = (char*)dest;
char* pscr = (char*)src;
while(count--)
{
*pdest = *psrc;
}
return dest;
}

推荐阅读