OSGi线程模型

OSGi线程模型,osgi,Osgi,我在网上搜索过,但没有找到满意的答案。OSGi容器中的线程模型是什么?它是否只是为每个注册的bundle生成一个新线程,例如。?任何关于线程模型的参考资料都很好。您没有发现任何东西,因为没有“OSGi线程模型”这样的东西。捆绑包只是存在,除非它们启动它们,否则不会“有线程”。OSGi框架遵循一个同步模型,即一切都是按照严格的顺序进行的。捆绑包不在线程中执行(但它们有自己的类加载器实例)。不过也有一些例外。例如,当通过postEvent方法引发事件时,事件的传递是异步完成的,通常在许多框架实现中作

我在网上搜索过,但没有找到满意的答案。OSGi容器中的线程模型是什么?它是否只是为每个注册的bundle生成一个新线程,例如。?任何关于线程模型的参考资料都很好。

您没有发现任何东西,因为没有“OSGi线程模型”这样的东西。捆绑包只是存在,除非它们启动它们,否则不会“有线程”。

OSGi框架遵循一个同步模型,即一切都是按照严格的顺序进行的。捆绑包不在线程中执行(但它们有自己的类加载器实例)。不过也有一些例外。例如,当通过postEvent方法引发事件时,事件的传递是异步完成的,通常在许多框架实现中作为一个线程实现。

启动捆绑包时,activator中的代码在一个线程中执行,类似于“主”线程。当主线程完成其执行时,bundle从“开始”状态更改为“活动”状态。因此,最好在另一个线程中执行耗时的代码,然后从主线程启动另一个线程

从服务使用者调用服务方法时。此时,在服务方法中编写的代码将在服务使用者的线程中执行


在服务方法中,我没有发现静态变量和局部变量之间有任何区别

除了一些特殊情况(事件/侦听器)之外,应用程序线程也不受限制。您可以自由使用线程。您确实需要知道,bundle生命周期中的某些操作必须(因此)是线程安全的,并且您需要非常小心地清除线程。您还需要小心,不要无谓地长时间阻止OSGi操作。

我仍然感到困惑。你的意思是说,除非bundles分叉线程,否则只有一个单线程执行?在这个场景中,多任务是如何工作的?例如,一个bundle可能正在进行计算,而另一个bundle正在为网络请求提供服务。这样的场景在框架中是如何处理的?抱歉我的无知。是的,bundle可以根据需要自由创建线程。如果捆绑包正在执行长时间运行的计算或服务于网络请求,那么这些事情通常发生在捆绑包创建的线程中。请阅读我(免费但尚未完成)的书中的并发章节:哇,尼尔-那是一本很棒的书!哦,我刚才看到你也在谈论DS-迫不及待地想去那里。希望你能继续写下去,我会买一份硬拷贝!