1. linux在调用pthread_mutex_lock的时候得到信号产生软件中断,信号处理函数结束后,pthread_mutex_lock是被自动重入还是会返回eintr错误?
答案在这里:
http://pubs.opengroup.org/onlinepubs/007908799/xsh/pthread_mutex_lock.html
pthread_mutex_lock不会返回eintr错误,而是当做信号从来没有发生而自动重入
2. 同步send和异步send有什么区别?
send函数绝对无法保证数据准确的到达对端,其阻塞和非阻塞体现在对端是否有足够的缓冲区时。
如果send数据无法到达对端会超时重传,包的发送规则有nagle算法(ack确认包黏住下一个发送包)和非nagle算法。
3. pthread_mutex_t是内核对象么?
pthread_mutex_t实际是一个futex,跟信号量一样都是内核和用户空间混合对象。其原理通过共享内存实现,每次使用futex的时候会在用户态获取其状态,如果没有竞争发生,则直接修改futex数据。如果有竞争发生,会调用内核api执行sleep,wakeup等操作。
4. mysql api是同步还是异步?效率如何?
mysql api是同步函数,使用socket通讯,类似于rpc call,每次直到执行结果返回后才完成函数的执行,所以尽量把慢查询和频繁数据操作提取到另一个线程去做,尽量不要影响主线程的执行效率!
mysql api对一个只有一条数据的表执行update操作(mysql_query),大概每秒可以执行5000-10000次左右。
5. udp/tcp send是很快的,主要是往操作系统复制数据,1亿次sendto只要2秒左右
6. 分布式系统具有软硬件平台分布性、高稳定性、高可用性、高可扩展性、高可管理性、高并发性及数据一致性等多种特性。