我在理解这三个框架之间的差异时遇到了一些麻烦:
这三个框架可用于同时运行代码,但使用不同数量的线程/进程或代码样式以不同的方式执行此操作。这就是我现在理解差异的方式:
- Tornado/Twisted使用由 I/O 循环控制的异步代码。这允许代码在单个线程上运行(多个线程是无用的,因为如果你有非阻塞代码,这是不必要的)
- Celery使用基于任务的系统来异步运行代码,代码本身仍然是同步的。存在一个主进程,它能够在不同进程上的其他工作人员之间分配不同的任务。
- Gevent使用基于线程的系统并产生一个线程来处理不同的传入连接。
我现在遇到的问题是:
- 我对这些框架的理解正确吗?
- 线程和进程之间的主要区别在于不同的线程使用相同的内存而进程不使用。一个进程通常在一个服务器核心上运行吗?(从而使 Celery 难以在小型服务器上实现)
- 如果我们谈论的是web 应用程序和套接字:
Tornado/Twisted能够接受(几乎)任意数量的套接字,因为它们使用异步代码并在 I/O 循环中对请求进行排队。
Celery/Gevent能做到这一点吗?他们是否必须产生一个新的进程/线程才能接受一个新的套接字?
我试图找出哪些技术最适合构建实时 Web 应用程序。