标签:builder 这一 模板 虚拟 探讨 简单工厂模式 访问者模式 程序 缓冲
一、Python中是如何进行内存管理的?
二、Python中常见的设计模式有哪些?
1. 创建型模式
说明:严格来说,简单工厂模式不是GoF总结出来的23种设计模式之一
三、什么是线程安全?
线程安全是在多线程的环境下,能够保证多个线程同时执行时程序依旧运行正确,而且要保证对于共享的数据可以由多个线程存取,但是同一时刻只能有一个线程进行存取。 多线程环境下解决资源竞争问题的办法是加锁来保证存取操作的唯一性
四、Gil锁对Python多线程的影响?
GIL的全称是Global Interpreter Lock(全局解释器锁),来源是Python设计之初的考虑,未来数据安全所做的决定。每个CPU在同一时间只执行一个线程。(在单核CPU下的多线程其实都只是并发,不是并行,并发和并行从宏观上来讲都是同时处理多路请求的概念、 但并发和并行又有区别,并行是指俩个或者多个时间在同一时刻发生;而并发是指俩个或者多个事件在同一时间间隔内发生)
在Python多线程下,每个线程的执行方式:
可见,某个线程想要执行,必须先拿到GIL,我们可以把GIL看作是"通行证", 并且在一个Python进程中,GIL只用一个,拿不到通行证的线程,就不允许进入CPU执行
在Python2.x里,GIL的释放逻辑是当前线程遇见IO操作或者ticks技术达到100 进行释放,而且每次释放GIL锁,线程进行锁竞争、切换线程,会消耗资源。并且由于GIL锁存在,Python里一个进程永远只能同时执行一个线程(拿到GIL的线程才能执行)
IO密集型代码(文件处理、网络爬虫等) 多线程能够有效提升效率(单线程下有IO操作会进行IO等待,造成不必要的时间浪费,而开启多线程能做线程A等待时,自动切换到线程B,可以不浪费CPU资源,从而能提升程序执行效率),所以多线程对IO密集型代码比较友好
五、什么是阻塞? 什么是非阻塞?
阻塞调用时这调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。有人也许会把阻塞调用和同步调用等起来,实际上他是不同的。对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已,例如,我们在socket中调用receive函数,如果缓冲区中没有数据,这个函数就会一直等待,直到有数据才返回。而此时,当前线程还会继续处理各种各样的消息,如果主窗口和调用函数在同一个线程中,除非你在特殊的界面操作函数中调用,其实主界面还是应该可以刷新。socket接收数据的另一个函数recv则是一个阻塞调用的例子,当socket工作在阻塞模式的时候,如果没有数据的情况下调用该函数,则当前线程就会被挂起,直到有数据为止
非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回
六、软连接和硬链接的区别?
软连接类似Windows的快捷方式,当删除源文件,那么软连接失效。硬链接可以理解为源文件一个别名。多个别名所代表的是一个同一个文件。rm一个文件的时候,那么此文件的硬链接数减一,当硬链接数为0的时候,文件删除
七、单例模式的应用场景有哪些?
单例模式应用的场景一般发现在一下条件下:
(1) 资源共享的情况下,避免由于资源操作时导致性能活损耗等。如日志文件,应用配置。
(2)控制资源的情况下,方便资源之间的相互通信。如线程池等。
标签:builder 这一 模板 虚拟 探讨 简单工厂模式 访问者模式 程序 缓冲
原文地址:http://www.cnblogs.com/Dreamxin/p/8001283.html