一旦创建了程序的目标文件,如果我在不同的输入数据集上只运行它的一个或多个实例,这是否重要?对应于这些运行的输出是否可能彼此相关?
关心 新手
答案 0 :(得分:2)
对于设计合理的程序,同时具有多个实例应该没问题。每个进程都与其他进程分开,具有自己的地址空间,自己的文件描述符以及所有其他资源的自身部分。只要输出文件是独立的,所有文件都应该像它们自己一样并行工作 - 唯一的例外可能是执行时间。
也就是说,基于已使用的资源和系统服务存在例外情况。其中一些是相对良性的,因为如果代码在分配资源时执行所需的状态检查,程序将正确地失败并显示错误消息。 E.g:
侦听网络端口:多个进程无法侦听同一接口上的同一协议端口。即如果实例正在侦听tcp / 80,则其他实例也不能这样做。
对同一文件进行写锁定。
其他可能导致您的程序巧妙地失败,可能是两个进程产生错误输出或做错事。 E.g:
在每个进程中访问相同的文件,假设它是该文件的唯一编写者。这对于使用硬编码临时文件名的程序尤其常见。输出文件也是常见的受害者。
按名称搜索进程表 - 具有多个实例可能会导致混淆哪个进程是请求的进程。这是设计不良的服务控制程序和脚本中常见的陷阱,它们会很好地杀死错误的服务器实例。
UI混淆:如果你有一个通知托盘小程序,它属于哪个进程?托盘中是否可以存在同一小程序的两个实例?哪一个属于哪个流程?
消息传递:根据操作系统和正在使用的消息传递方法,如果程序设置了带有硬编码ID的侦听器,则可能会弄得一团糟。
有两百万种不同的方式,两个进程可能导致彼此失败。每次使用外部资源时,您都应该花时间考虑如果第二个程序要求使用相同资源会发生什么。如果运气好的话,你会有一个很好的状态代码告诉你 - 在其他情况下你可能需要明确地保护你的程序。
如果某个程序无法处理多个实例,会彻底记录此限制,然后使用锁定代码来防止启动多个实例。