为什么使用连接池?
普通模式下每次操作都需要反复创建销毁mysql连接请求。每个连接请求都需要 经历三次握手、四次挥手的消耗操作。但是如果请求量一旦过大那么服务的资源消 耗、时间处理肯定会非常的大。
所以连接池的好处就是减少重复的连接,节省资源的开销。进而复用每个连接。
那些场景下可以用呢?
高并发、微服务场景下,可以根据业务请求类型划分为写连接池或者读连接池。 swoole采用什么实现连接池? 协程+通道,构建连接池 Swoole为什么可以实现连接池而普通模式不行 Swoole是常驻内存,建立后可以重复使用,协程执行完毕只是回收协程的资源, 而对于通道的对象是不会有影响的。而普通模式下每个请求执行完毕后整个连接过 程中的资源都全部被释放了。
什么是协程?
协程可以简单理解为线程,只不过这个线程是用户态的,不需要操作系统参与, 创建销毁和切换的成本非常低,和线程不同的是协程没法利用多核cpu的,想利 用多核cpu需要依赖 Swoole 的多进程模型。 什 么 是 channel channel 可以理解为消息队列,只不过是协程间的消息队列,多个协程通过 push 和 pop 操作生产消息和消费消息,用来协程之间的通讯。需要注意的是 channel 是没法跨进程的,只能一个 Swoole 进程里的协程间通讯,最典型的应用是连接 池和并发调用。
什么是线程安全、线程不安全?
线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行 保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一 致或者数据污染。
线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数 据是脏数据