1.
CPU耗尽
使用OpenMP平行化处理数值运算以后,会耗尽CPU能力,出现100%占用。
CMP格式解压模块用到OpenMP。
宁波墙上的程序CPU100%占用的原因咩?
高性能开发
CPU并行运算:OpenMP,MPI,TBB,MapReduce(这个听起来最像所谓的云计算)
GPGPU:CUDA,OpenCL
long long和LONGLONG
win32中的long long就是基本类型,DWORD也定义为该类型。但LONGLONG实际是__int64。
sprintf输出long long使用格式符%ld,LONGLONG则是%I64d。
2.
IPv4中,TCP和UDP都需要客户机指定服务器的IP和端口号。服务器也需要指定监听的客户机的IP和端口号。
该数据结构是sockaddr_in
struct socaddr_in
{
short sin_family; // 设为AF_INET,指定正在使用IP地址族
u_short sin_port; // 端口号
struct in_addr sin_addr; // IP地址,unsigned long inet_addr(const char FAR *cp)
char sin_zero[8]; //
}
函数inet_addr()用来将ip字符串转成无符号长整数ip。
unsigned long inet_addr(const char FAR *cp)
字节顺序,大部分CPU比如Intel86都使用小头法。Internet标准中定义的网络字节顺序是大头法。有8个API用来处理主机字节和网络字节的转换,从host到net和从net到host各4个。下面是host to net的4个。
u_long htonl(u_long hostlong);
int WSAHtonl(
SOCKET s,
u_long hostlong,
u_long FAR * lpnetlong;
}
u_short htons(u_short hostshort);
int WSAHtons(
SOCKET s,
u_short hostshort,
u_short FAR * lpnetshort;
};
套接字类型,SOCK_STREAM(TCP/IP)和SOCK_DGRAM(UDP/IP)。
套接字Protocol,IPPROTO_TCP和IPPROTO_UDP。
accept失败
accept函数,会传入SOCKADDR的长度,这个长度值必须初始化成正确值。
比如定义了SOCKADDR_IN addr,则int len = sizeof(addr).
send失败
send失败的情况比较出人意料。是因为TCPServer线程退出了。
因为在server的测试项目中,accept()函数后就是return。一旦有客户端连接进来,accept就会返回。于是测试的server项目就退出了。
介就是为嘛显示框架slave master有先后么?
WSAEMSGSIZE
流传输协议接收数据是缓冲的,不会有WSAEMSGSIZE。
UDP上如果数据超过缓冲区大小会造成该错误。