线程创建失败
一般情况下,创建线程失败基本都是由于内存不足导致的。可以使用_thread.get_heap_size()确认当前内存大小,并且通过调整线程栈空间的方式,尽量节省内存消耗,当然栈空间需要满足使用空间需求,否则会出现dump。
线程资源如何释放防止内存泄漏
当前线程退出可以通过两种方式,通过接口_thread.thread_stop(thread_id),可以直接在外部中断程序运行。或者线程自动运行结束退出,系统会自动回收线程资源。
线程死锁问题
死锁(英语:deadlock),当多线程情况下,双方都在等待对方停止执行,以获取系统资源,但是没有一方提前退出时,就称为死锁。
需要保证线程锁成对使用,加锁后不应该有较多任务,避免锁内再掉锁等情况, 并且_thread.thread_stop(thread_id)慎用,防止出现加锁过程中,退出程序导致死锁。
如何唤醒阻塞线程
对于需要阻塞的线程,可以通过线程间通信的方式实现,能够唤醒的方式进行阻塞,不要采用sleep等方式,无法唤醒。
优先级
QuecPython 固定优先级,当前主线程(repl交互线程)优先级 < python 子线程 < 中断/回调线程。用户创建所有的 python 子线程优先级同级。
如何进行线程保活
当前尚未提供 python 守护线程,或者线程状态查询接口,如果需要保证线程存活,可以自定义保活机制,比如根据需要保活的线程的使用情况,进行计数统计,保证线程在一定时间内会执行某个动作,若未完成,则进行线程清除及重新创建。
线程死循环
当前QuecPython适配较多平台,对于线程死循环可能会导致业务无法进行,系统喂狗超时,导致dump。
线程栈耗尽
QuecPython 不同的平台上,默认创建线程栈空间不同,默认2k/8k,当线程业务量较大时会导致栈溢出,会导致无法预知dump,因此需要考虑当前默认栈是否满足业务需要,通过_thread.thread_size()接口确认当前栈大小及设置栈大小。
线程安全
线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且准确的执行,不会出现数据污染等意外情况。 我们支持互斥锁、信号量等方式进行数据保护,在进行多线程共享数据时,用户可以根据需要进行使用。
中断、回调、python 子线程、主线程(repl交互线程)的优先级对比。
中断/回调依赖与其触发线程的,不同的中断/回调具有不同的触发对象,因此无法确定其优先级。
主线程(repl交互线程)优先级 < python 子线程 < 中断/回调线程。
相同优先级的是否支持时间片轮转。
支持,但是是受限的,由于 python 层 GIL 锁机制,线程在调度后会添加 GIL 锁,只有保证 GIL 锁是空闲的才能执行成功,直到 python 线程执行结束或者让出 GIL 锁,其他线程才能会被执行。
是否支持线程优先级配置。
不支持。