5互斥锁、鸭子类型、进程、线程、协成
一、为什么有了GIL锁还要互斥锁?
首先GIL锁是CPython底层的全局解释器锁;互斥锁是程序层面的锁
因为GIL锁只是保证了一条线程获得GIL锁才能执行,但是没有保证数据安全
互斥锁是为了保证多线程并发操作数据时候的数据安全,避免数据污染
二、请详细讲一下什么是鸭子类型?
一个对象只要看起来像鸭子、走起来像鸭子、叫起来像鸭子、那么它就是一只鸭子
不关注对象的具体类型,而是只关注对象的属性和方法,是Python面向对象中描述接口的概念
举个例子Python中的迭代器
迭代器需要实现iter()方法和next()方法
只要一个对象具有这两个方法,就可以被视作迭代器来使用
三、讲一下进程、线程、协程,代码如何实现,你用过吗?
- 进程是资源分配的最小单位,一个程序至少开启一个进程
- 线程是CPU调度的最小单位,一个进程下至少有一个线程
- 协程是在单线程下实现并发,程序员在代码层面IO操作
开启进程的两种方式
- 写一个类>继承Process>重写类的run方法>得到实例化对象>对象.start
- 通过Process类得到实例化一个对象>传入任务>调用对象.start
开启线程的两种方式
- 写一个类>继承Thread>重写类的run方法>对象.start
- 通过Thread类实例化一个对象>传入任务>调用对象.start
开启协程的两种方式
- 之前借助于第三方gevent,基于greenlet开协程
- 现在Python有内置asyncio包函数前async和await关键字用
进程间通过消息中间件;线程间通过共享变量实现。

浙公网安备 33010602011771号