消息
消息传递机制直接构建到 pyRTOS 中的任务中。每个任务都有自己的传入和传出邮箱。当运行的任务 yield 时 ,将传递消息。这个消息传递系统相当简单。每封邮件都有一个发件人和一个收件人,消息还有一个类型,可以是pyRTOS.QUIT或用户定义的类型(参见sample.py)。用户定义的类型以128或更高的整数值开始。低于128的类型保留给pyRTOS API将来使用。消息中可以包含message字段,但这不是必需的。如果type字段足以传递必要的信息,则最好将message字段留空,以节省内存。消息字段可以包含任何内容,包括对象和列表。如果需要向新任务传递参数,一种方法是使用参数列表或元组对新创建的任务对象调用 deliver()。这将把参数添加到任务的消息队列中,允许它在初始化期间访问参数。
检查消息是任何可能接收消息的任务的关键部分。未检查的消息队列可能会累积太多消息,导致系统内存不足。如果您的任务可能接收到消息,那么在每个循环中检查消息是很重要的。还要注意不要发送太多的消息给低优先级任务而不定期阻塞高优先级任务,让任务有时间处理消息队列。如果接收消息的任务永远得不到CPU时间,这将导致内存耗尽。
消息可以通过引用目标任务对象或对象的名称来寻址。名称可以是任何类型的可比较数据,数字是效率最高的,而字符串是最可读的。对象引用寻址必须以实际存在的对象,否则操作系统将崩溃。还要注意的是,保留已终止任务的引用将阻止这些任务被垃圾收集,从而造成潜在的内存泄漏。对象引用是最快的消息寻址方法,它们在调试时可能会提供一些好处,但这取决于用户如何理解和避免相关的危害。名称寻址要安全得多,但是,发往不存任务名称的消息将以静默方式传递,从而使某些bug更难找到。此外,由于名称地址需要查找关联的对象,因此名称地址消息将消耗大量的CPU时间来传递。
sample.py中展示了几个消息传递示例。
|