小编Vin*_*ars的帖子

ip route del不会删除整个表

我最近开始使用ip route命令进行高级路由.现在我遇到了一些让我感到困惑的事情.添加到表中的默认路由将很容易删除,而另一条路径仍然存在.

我添加了这两个规则:

ip route add dev wlan0 default via 192.168.0.1 table 21
ip route add dev wlan0 192.168.0.0/24 table 21
Run Code Online (Sandbox Code Playgroud)

如果我这样做:

ip route show table 21
Run Code Online (Sandbox Code Playgroud)

我看到这两条规则都存在.

default via 192.168.0.1 dev wlan0 
192.168.0.0/24 dev wlan0  scope link  
Run Code Online (Sandbox Code Playgroud)

如果我然后尝试删除表21,并再次显示它:

ip route del table 21
ip route show table 21
Run Code Online (Sandbox Code Playgroud)

仍然存在该规则.

192.168.0.0/24 dev wlan0  scope link
Run Code Online (Sandbox Code Playgroud)

有谁能解释一下?手册页说del旨在删除ROUTE,其中还包括表格.

linux routing

12
推荐指数
2
解决办法
3万
查看次数

在Android应用程序中使用多个进程的优缺点是什么?

我写这个问题不是作为任何特定应用的一部分,而是作为未来应用的潜在用途的一部分.我知道这个问题的答案可能非常具体,但我希望你能忍受我.我会按原样表达我的理解,希望你可以通过扩展它来帮助我.令人惊讶的是,我在网上搜索了一个"完整"的概述并且无法找到它.显然欢迎任何指向相关页面的链接.

默认情况下,Android应用程序在单个进程中运行.默认情况下,您启动的每个活动或服务都会在主线程中运行.用户的所有操作都由主线程的Looper排队,并且相应的回调在主线程中处理.

为了提供并发性,线程可以以多种不同的方式启动,单个或池中.在这方面没有明确需要多个过程.使用多个进程来允许设备的多个内核并行工作是不必要的,因为Threads也可以并行运行,甚至可能是你的主线程?但也许实际上更容易实现?

为了让Activity或Service在特定(可能不同的)进程中工作,您只需android:process在Manifest文件中设置该属性.这么容易实现?

Android框架专为移动设备而构建,通常具有有限的内存.因此,可以在各种情况下杀死进程,这里明确说明.只要您实现活动和服务的生命周期回调,例如onStoponDestroy,这不应该给任何实际问题.但显然,通过使用多个进程来划分应用程序的各个部分,可能会使更重要的事情保持活力.例如,后台下载服务可以保持活动(重要性为3级),而启动此服务的初始活动的进程(现在在后台(级别4))可以为其资源释放.此外,您正在隔离应用程序的核心功能,这可能会让您的设备更好地利用其资源?

Binder框架使IPC非常容易处理,无论实际使用多个进程,都可以使用它.我认为为应用程序提供多个进程的主要成本是访问共享资源,或者在进程之间发送这些资源,不包括从Zygote分支进程所需的额外资源.我想知道使用多个进程是否会强迫您以不同方式实现您的应用程序?

我认为从概念上讲,使用多个流程不会增加实施的便利性?

为了总结多个进程的优点:

  • 隔离可能会提供更多的终身保护.
  • 分区化使设备在重新获得资源方面具有更大的可操作性.
  • 并行化性能提升?

缺点:

  • 必须使用资源从Zygote分支新进程
  • 在一个应用程序中,需要在多个进程上共享资源,这会对设备和应用程序性能造成压力.

主要使用情况我能想到的:

  • 对任何用户交互使用前台活动,并运行连续使用的绑定服务以执行有用的同步,该同步可能比用户对您的活动和/或应用程序的会话寿命更长.

如果您对我的理解有任何评论,请说明(在我的解释中注意几个问号).如果你有任何优点和/或缺点添加请回复,我会将它们添加到列表中.

android process

11
推荐指数
1
解决办法
3277
查看次数

当Set中的对象被更改为彼此匹配时会发生什么?

正如标题所示,我有一个关于更改集合中的对象的问题,使得它们变得完全相同(在集合的眼睛中).只是好奇.

关于Python,我问这个问题,但如果它是可推广的,请随意这样做.

如果我在Python中正确理解,Set iterable将通过等同它们的哈希来确定对象是否"相等".因此对于对象ab,这将是:

hash(a) == hash(b)
Run Code Online (Sandbox Code Playgroud)

对于任何对象,你让你可以覆盖标准的哈希函数,__hash__以特定的喜好.

假设您创建一个哈希函数,该函数接受对象中的几个或所有对象,并使用哈希的组合作为自己的对象(例如,通过对它们进行OR运算).

现在,如果你在一个Set中有几个最初不同的对象,并因此遍历该Set并改变其内部对象匹配的对象,那么Set会发生什么?他们是否会留在那里,或者他们会被踢出去,还是我们需要等到对该套装进行操作?或者我们在某处提出了一些错误?

python hash set

6
推荐指数
2
解决办法
141
查看次数

即使子进程已取消,MultiProcessing Pipe recv块仍会阻塞

阅读有关此主题的几个问题后,我现在知道子进程从父进程继承了文件描述符。当父母关闭连接时,这会使孩子更难收到EOFError。

但是我的情况恰恰相反,我不明白我面临的问题。

我有一个父进程,该进程启动一个子进程,并使其能够访问我创建的Pipe连接的一端。现在,当子进程完成,出现故障或其他任何情况时,所有操作都将停止并关闭连接。此时,子进程显示为已失效。

然后,我希望父进程的连接在阻塞的recv调用上抛出EOFError。但是相反,它只是坐在那里等待。

我在这里想念什么?

编辑

我认为这个例子代表了问题:

from multiprocessing import Process, Pipe
from threading import Thread
import time

class Parent(object):

    def __init__(self):
        self.parent_conn, child_conn = Pipe()
        self.child = Process(target=Child, args=(child_conn,))
        self.child.start()        

        def recv():
            try:
                self.parent_conn.recv()
            except EOFError:
                print "EOF"
            except:
                print "something else"

        # Does not work
        recv()

        # Works fine
        t = Thread(target=recv)
        t.setDaemon(True)
        t.start()

    def close(self):
        self.parent_conn.close()
        self.child.join()

class Child(object):

    def __init__(self, conn):
        conn.close()

if __name__ == "__main__":
    p = Parent()
    time.sleep(1)
    p.close()
Run Code Online (Sandbox Code Playgroud)

如果我确实使用单独的线程,则允许父级关闭其自己的连接,并且一切正常。(请注意,您仍然需要以某种方式知道子进程是如何完成的。)相反,如果我直接调用recv,它将明显阻塞,但是我怀疑一旦子进程关闭其连接,它将引发EOFError。但事实并非如此。谁能澄清?

python pipe multiprocessing eoferror

5
推荐指数
1
解决办法
4225
查看次数

标签 统计

python ×2

android ×1

eoferror ×1

hash ×1

linux ×1

multiprocessing ×1

pipe ×1

process ×1

routing ×1

set ×1