一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

处理单元的工作调度的制作方法

2022-11-05 05:57:10 来源:中国专利 TAG:

处理单元的工作调度


背景技术:

1.计算系统包括可以用于执行工作单元的处理资源。处理资源可以包括多个处理器和/或多核处理器的核。调度器可以用于调度在处理资源上执行的工作单元。
附图说明
2.关于以下附图描述了本公开的一些实施方式。
3.图1是根据一些示例的包括调度器、线程组和调度队列的计算系统的框图。
4.图2是根据一些示例的计算系统的框图。
5.图3是根据一些示例的调度过程的流程图。
6.图4是根据一些示例的存储有机器可读指令的存储介质的框图。
7.图5是根据一些示例的计算系统的框图。
8.图6是根据一些示例的过程的流程图。
9.在所有附图中,相同的附图标记指代相似但不一定相同的元件。附图不一定是成比例的,并且一些部分的尺寸可以被放大以更清楚地图示所示的示例。此外,附图提供了与说明书一致的示例和/或实施方式;然而,说明书不限于附图中提供的示例和/或实施方式。
具体实施方式
10.在本公开中,除非上下文另外明确指示,否则使用术语“一个/一种(a/an)”或“所述(the)”旨在同样包括复数形式。同样地,当在本公开中使用时,术语“包括(includes/including/comprises/comprising)”、“具有(have/having)”指明存在所述元件,但不排除存在或添加其他元件。
11.计算系统包括可以用于执行工作单元的处理资源。处理资源可以包括多个处理器和/或多核处理器的核。调度器可以用于调度在处理资源上执行的工作单元。
[0012]“工作单元”可以指要在计算系统中执行的任何任务。应注意,任务可以是更大的任务集合(如事务、操作等)的一部分。
[0013]
一些工作单元与其他工作单元相比与更高的优先级相关联。并且,一些工作单元可能比其他工作单元需要更长的时间量来执行。在一些情况下,如果没有空闲处理资源可用,则需要相对较长时间来执行的较低优先级工作单元可能阻止需要相对较短时间的较高优先级工作单元的执行。
[0014]
为了确保需要相对较短时间量来执行的更高优先级的工作单元不会被饿死(starved),调度器可以实施各种调度技术,来减少不同类型的工作单元之间的争用。在一些情况下,调度技术可能非常复杂,并且实施这种调度技术的调度器的资源使用可能随着要调度工作单元的处理资源的数量而增加。换句话说,调度复杂性可能随着处理资源的数量而增加,这可能增加调度开销。
[0015]
根据本公开的一些实施方式,调度器能够在计算系统的处理单元上调度工作单元。“处理单元”可以指能够执行机器可读指令以执行工作单元的资源。处理单元可以包括
硬件处理资源或逻辑处理资源。
[0016]
在一些示例中,调度器所采用的调度技术(在与工作调度相关联的资源使用情况方面)的成本基本上不随计算系统中的处理单元的数量而改变大小(增加)。在执行工作时,调度技术还可以考虑处理单元的位置。当调度工作单元时,调度技术还可以力图减少锁的使用量。
[0017]
图1是根据一些示例的计算系统100的框图。计算系统100可以包括能够执行工作单元的任何类型的系统。例如,计算系统100可以包括以下各项中的任一项或某种组合:管理对存储在存储设备中的数据的访问的存储控制器(或多个存储控制器)、服务器计算机(或多个服务器计算机)、云计算机(或多个云计算机)等。
[0018]
在一些示例中,计算系统100中的处理单元采用硬件线程的形式。硬件线程也可以称为中央处理单元(cpu)线程。“硬件线程”可以指能够执行工作单元的处理资源(无论是物理的还是逻辑的)。
[0019]
如图1所示,硬件线程102被划分成线程组。每个线程组可以包括多个硬件线程,其中,“多个”可以指单个硬件线程或多个硬件线程。
[0020]
进一步参考图2,描绘了计算系统100的示例硬件布置。计算系统100包括多个计算节点202,其中,每个计算节点202包括多个处理器204。在其他示例中,计算系统100可以仅包括一个计算节点,和/或计算节点202可以仅包括一个处理器204。
[0021]
在一些示例中,每个处理器204可以是具有多个物理核206的多核处理器。处理器的“物理核”包括能够执行机器可读指令的处理电路布置。处理器204的多个物理核206能够同时执行机器可读指令。
[0022]
在一些示例中,每个物理核206有一个硬件线程102。在其他示例中,每个物理核206可以有多个硬件线程102。如果支持同时多线程(smt),则每个物理核206可以存在多个硬件线程102。例如,英特尔公司的处理器可以支持超线程,这是smt的一种形式。其他供应商的处理器也支持smt。
[0023]
如果支持smt,则计算系统100的操作系统(os)可以将每个物理核206划分为可以执行工作单元的多个部分(用于实施逻辑核)。逻辑核能够独立执行机器可读指令以执行对应的工作单元。应注意,逻辑核可以或可以不同时执行机器可读指令。
[0024]
在其他示例中,根据本公开的一些实施方式的技术或机制适用于不支持smt的处理器。
[0025]
每个线程组104与相应的调度队列106相关联。在图1的示例中,每个线程组104有一个调度队列106。在不同的示例中,每个线程组104可以有多于一个调度队列106。在其他示例中,一个调度队列106可以由多个线程组104共享。
[0026]“调度队列”是指能够包含关于工作单元的信息的任何数据结构。例如,关于工作单元的信息可以包括对工作单元(或更具体地,执行工作单元的机器可读指令)的指针或其他引用。在其他示例中,调度队列可以存储包括机器可读指令的信息。在一些示例中,调度队列可以采用调度堆或调度优先级队列的形式,其中,工作单元根据与工作单元相关联的优先级进行排序(工作单元的相对优先级可以由与工作单元相关联的元数据指示)。
[0027]
图1进一步示出了计算系统100中的调度器108。调度器108接收要调度以由按照根据本公开的一些实施方式的调度技术选择的硬件线程102执行的工作单元。如图1所示,调
度器108接收要调度以在计算系统100中执行的工作单元110。如这里所使用的,接收工作单元的调度器108可以指接收关于工作单元的信息的调度器108。
[0028]
调度器108可以使用机器可读指令来实施,或使用机器可读指令和硬件处理电路的组合来实施。尽管被示出为单个单元,但应注意,可以有多个调度器108的实例在计算系统100中执行,其中,调度器108的多个实例可以并行执行并且可以出于调度工作单元的目的而彼此交互。
[0029]
在一些示例中,在每个调度队列106之前提供了缓冲区112。调度器108可以将工作单元插入到缓冲区112中,而不是直接插入到对应的调度队列106中。在其他示例中,可以省略缓冲区112。
[0030]
缓冲区112可以是无锁缓冲区,以临时存储由调度器108调度以供对应线程组104执行的工作单元的信息。无锁缓冲区是指无需首先获得缓冲区或缓冲区任何部分上的锁即可将工作单元插入其中的缓冲区。将工作单元插入缓冲区或调度队列可以指将关于工作单元的信息插入缓冲区。
[0031]
例如,缓冲区112可以包括先进先出(fifo)缓冲区。可以将工作单元添加到fifo缓冲区的各个条目,以使得添加到fifo缓冲区的第一工作单元是从fifo缓冲区中移除的第一工作单元。在一些示例中,相应线程组104中的空闲硬件线程102能够从缓冲区112取得工作单元。如果硬件线程102当前没有执行机器可读指令,则硬件线程102是空闲的。取决于工作单元的相对优先级,空闲硬件线程102可以执行从缓冲区112取得的工作单元或调度队列106中的工作单元。
[0032]
缓冲区112和调度队列106中的每个工作单元可以与指示工作单元的相对优先级的元数据相关联。元数据可以包括优先级指示符,该优先级指示符可以设置为各种不同值(例如,如低、中和高之类的分类值,或数值)中的任何一个,以指示工作单元的相应不同优先级。
[0033]
在其他示例中,缓冲区112和调度队列106中的每个工作单元的元数据可以指示工作的类型。例如,工作单元可以包括前台工作或后台工作,其中,后台工作在不执行前台工作的处理资源可用时在后台执行。在进一步的示例中,缓冲区112和调度队列106中的每个工作单元的元数据可以指示其他类型的工作,如与根据网络或其他协议处理数据包相关的工作、与主机所请求的读/写操作相关的工作、与将数据同步到次级存储(例如,基于磁盘的存储)相关的工作、与垃圾收集以释放存储空间相关的工作等等。一些类型的工作可以被认为比其他类型的工作更重要(例如,具有更高的优先级)。
[0034]
通过使用无锁缓冲区112,调度器108可以避免必须在“正常”队列路径(即,入队路径,其中,调度器108基于调度器108所应用的调度将工作单元添加到对应调度队列106)中的线程组104之间采用锁。在将工作单元出队(de-queue)之前,硬件线程102可以将工作单元从无锁缓冲区112转移到其相关联的调度队列106。
[0035]
在一些示例中,定义了多个线程域114,其中,每个线程域114包括相应的线程组104的集合。线程域114包括线程组104的集合,这些线程组包括共享多个物理资源的硬件线程102,其中,多个物理资源可以包括以下各项中的任一项或某种组合:缓存存储器(例如,3级或l3缓存存储器)、插槽(socket)或计算节点。
[0036]
如图2所描绘的,计算节点202可以包括多个插槽208,其中,每个插槽208通常可以
指多个处理器204(一个处理器或多个处理器)的某种物理分组。在图2描绘的示例中,每个插槽208接收一个处理器204。在其他示例中,每个插槽208可以接收多个处理器204。在一些示例中,插槽可以指能够与一个或多个处理器进行物理连接和电连接的连接器组件。在其他示例中,“插槽”可以更一般地指代另一个处理器分组。
[0037]
在一些示例中,计算系统100的计算节点202是非一致性存储器访问(numa)布置的一部分。在numa布置中,处理器204(或处理器204的核206)对存储器中数据的访问时间取决于存储器相对于处理器(核)的位置。例如,与位于更远的存储器(如在另一个插槽或另一个计算节点202上的存储器)相比,处理器(核)可以更快地访问通过存储器总线连接到处理器(核)的本地存储器。
[0038]
在其他示例中,采用非numa布置。
[0039]
如图2进一步所示,每个处理器204可以包括多个缓存存储器210。在其他示例中,缓存存储器210可以在处理器204的外部。缓存存储器210可以是l3缓存存储器。l3缓存存储器可以是缓存存储器分层布置的一部分。缓存存储器的分层布置可以包括1级(l1)和2级(l2)缓存存储器,1级(l1)和2级(l2)缓存存储器与l3缓存存储器相比相对于对应的处理器核206本地化程度更高或同等本地化。例如,l1缓存存储器和l2缓存存储器可以是物理核206的一部分或在物理核206的外部。在进一步的示例中,缓存存储器的分层布置可以包括4级(l4)缓存存储器,4级(l4)缓存存储器与l3缓存存储器相比相对于对应的处理器核206本地化程度更低或同等本地化。
[0040]
处理器204的物理核206的第一子集可以共享第一缓存存储器210,处理器204的物理核206的第二子集可以共享第二缓存存储器210,以此类推。
[0041]
在一些示例中,线程域114可以包括具有共享相同缓存存储器210(例如,l3缓存存储器)的硬件线程102的线程组104。在进一步的示例中,线程域114可以包括具有共享相同插槽208的硬件线程102的线程组104(即,硬件线程102是相同插槽208中的(多个)处理器204的一部分)。在其他示例中,线程域114可以包括具有作为相同计算节点202的一部分的硬件线程102的线程组104。
[0042]
在一些示例中,调度器108可以跟踪哪些硬件线程空闲。例如,调度器108可以为每个相应的线程域114维护一个线程域位图116。例如,调度器108可以为第一线程域114维护第一线程域位图116,为第二线程域114维护第二线程域位图116,以此类推。
[0043]
线程域位图116可以包括与线程域114的相应硬件线程102相对应的位集合。当线程域位图116中的位被设置为第一值(例如,逻辑“1”或“0”)时,可以指示相应硬件线程102空闲。当线程域位图116中的位被设置为不同的第二值(例如,逻辑“0”或“1”)时,可以指示相应硬件线程102不空闲(即,正忙于执行机器可读指令)。
[0044]
更一般地,调度器108可以维护每个相应线程域114的数据结构,其中,该数据结构包括用于指示相应线程域114中的对应硬件线程102是空闲还是忙碌的指示符。
[0045]
在一些示例中,当硬件线程102从忙碌转变为空闲时,硬件线程102可以向调度器108发送空闲指示,调度器108可以更新相应线程域位图116(或其他数据结构)中的对应位。当硬件线程102从空闲转变为忙碌时,硬件线程102可以向调度器108发送忙碌指示,调度器108可以更新相应线程域位图116(或其他数据结构)中的对应位。
[0046]
尽管图2示出了具有线程域114的示例,但在其他示例中,未使用线程域114。
[0047]
图3是根据一些示例可以响应于接收到要调度用于执行的工作单元(例如,图1中的110)而由调度器108执行的调度过程300的流程图。
[0048]
调度器108确定(在302处)接收到的工作单元是新工作还是恢复的工作。恢复的工作单元是指先前正在执行但由于某种原因暂停的现有工作,并且已接收到恢复暂停的现有工作的请求。新工作单元可以指先前未执行的工作。应注意,新工作单元可以是现有工作的一部分,也可以是不属于现有工作的一部分的工作。
[0049]“现有工作”是指先前由给定线程组104中的硬件线程102执行的工作。执行现有工作的给定线程组104可以称为“父(parent)”线程组。
[0050]
如果接收到的工作单元是恢复的工作,则调度器108确定(在304处)是否允许父线程组运行接收到的工作单元的类型。元数据可以与接收到的工作单元相关联,并且元数据可以指示接收到的工作单元的工作类型(例如,上文进一步提到的任何工作类型)。在一些示例中,线程组104的子集可以被保留来执行更高优先级的工作,使得线程组的这个子集不能执行较低优先级的工作。例如,如图1所示,调度器108可以维护调度器掩码信息118,其标识哪些线程组104可以执行哪些类型的工作。例如,调度器掩码信息118可以将相应线程组104的标识符与对应的工作类型相关联,或者与指示线程组104可以执行任何类型的工作的指示符相关联。可以不断地更新调度器掩码信息118,使得调度器掩码信息118可以随时间改变。因此,如果调度器掩码信息118被改变,则先前可能被允许执行特定类型的工作的线程组104可能不再被允许执行特定类型的工作。
[0051]
如果调度器108确定(在304处)允许父线程组执行接收到的工作单元的工作类型,则调度器108选择(在306处)作为执行接收到的工作单元的候选的候选线程组。在一些示例中,对于任何给定的工作单元,可能存在由调度器108选择的两个候选线程组。在其他示例中,调度器108可以选择多于两个的候选线程组。
[0052]
选择可以潜在地运行接收到的工作单元的多个候选线程组的原因是在后续调度迭代中不继续使用调度器108先前做出的较差的调度选择。例如,父线程组可能不是执行恢复的工作的最佳线程组。通过选择可以从中做出选择来执行接收到的工作单元的多个候选线程组,有可能可以选择更优的线程组来执行恢复的工作。
[0053]
(在306处)选择的候选线程组包括父线程组和从线程组的偏置分布(biased distribution)中随机选择的另一个线程组。线程组的偏置分布包括与父线程组更接近的那些线程组(如在线程域114中)。例如,如果线程组的偏置分布包括n(n≥2),则作为偏置分布的一部分的这n个线程组是根据接近度标准与父线程组最接近的n个线程组。
[0054]
在一些示例中,接近度标准可以在共享资源(如共享l3缓存存储器、共享插槽或共享计算节点)方面按照这些共享资源的降序来指定接近度。例如,与不共享l3缓存存储器的线程组相比,包括共享l3缓存存储器的硬件线程的线程组被认为彼此更接近。与具有不同插槽中的硬件线程的线程组相比,包括同一插槽中的硬件线程的线程组被认为彼此更接近。与具有不同计算节点中的硬件线程的线程组相比,包括同一计算节点中的硬件线程的线程组被认为彼此更接近。
[0055]
在更具体的示例中,线程组的偏置分布可以包括n个线程组,其中每个线程组被选择为在偏置分布中有50%的可能性与父线程组共享相同的l3缓存存储器,有25%的可能性与父线程组在同一个插槽中但不共享相同的l3缓存存储器,有15%的可能性在同一个计算
节点中但不共享同一个插槽,如此等等。
[0056]
如果调度器108确定(在304处)不允许父线程组运行接收到的工作单元的类型,则调度器108从线程组的偏置分布中随机选择(在308处)两个候选线程组。换句话说,(在308处)选择的候选线程组不包括父线程组。
[0057]
如果调度器108确定(在302处)接收到的工作单元是新工作,则调度器108确定(在310处)接收到的工作单元是现有工作的一部分还是不是现有工作的一部分。
[0058]
如果调度器108确定(在310处)接收到的工作单元是现有工作的一部分,则调度器确定(在304处)是否允许父线程组运行接收到的工作单元的类型,并且选择性地执行如以上所讨论的选择任务306和308。
[0059]
如果接收到的工作单元不是任何现有工作的一部分,则调度器108随机选择(在312处)候选线程组,如来自相同线程域114的线程组。
[0060]
从任务306、308和312中的任一个,调度器108使用选择标准从候选线程组中选择(在314处)。选择标准可以基于力图减少与执行接收到的工作单元相关联的延迟量的标准。例如,调度器108可以确定任何候选线程组是否具有空闲硬件线程。如果是,则调度器108从具有空闲硬件线程的候选线程组中选择(在316处)线程组。调度器108然后将接收到的工作单元入队(enqueue)(在318处)在与所选线程组相关联的调度队列106(或缓冲区112)中。
[0061]
如果候选线程组全都不具有空闲硬件线程,则调度器108从候选线程组中选择(在320处)预期具有更短排队延迟的线程组。对于接收到的工作单元,哪个线程组可能与较短排队延迟相关联的确定可以基于由调度器108维护的关于当前被调度在每个候选线程组中运行的工作类型的信息,包括工作单元的优先级、执行的预期时间长度等。
[0062]
在一些情况下,在入队时间(在选择线程组并且将接收的工作单元插入到相应调度队列106或缓冲区112的时间),调度器108可能没有足够的信息来做出关于将接收到的工作单元放在哪里的最佳决策。例如,当前运行的工作单元所需的执行时间可能比基于其他工作单元的历史信息所预期的长得多。
[0063]
响应于触发,线程组104的空闲硬件线程102能够从同一线程域114中的其他线程组104窃取(steal)工作单元。例如,第一线程组中的空闲硬件线程可以从第二线程组104的缓冲区112中窃取工作单元。窃取工作单元可以是指第一线程组中空闲硬件线程从第二线程组的缓冲区112中取得工作单元的信息,并执行第二线程组中的工作单元。
[0064]
虽然提到从缓冲区112窃取工作单元,但在其他示例中,可以从调度队列106窃取工作单元。
[0065]
导致硬件线程尝试从另一个线程组窃取工作单元的触发器可以包括基于时间的触发器,触发器是基于定时器的。每次定时器到期时,各个线程组104中的空闲硬件线程可以尝试从其他线程组窃取工作。窃取尝试可以按基于架构拓扑的顺序进行,包括l3缓存存储器、插槽和计算节点。例如,空闲硬件线程可以首先尝试从共享相同l3缓存存储器的另一个线程组104窃取工作单元,并且如果不可能,则从共享相同插槽的另一个线程组104窃取工作单元,并且如果不可能,则从共享相同计算节点的另一个线程组104窃取工作单元。
[0066]
图4是存储有机器可读指令的非暂态机器可读或计算机可读存储介质400的框图,机器可读指令在执行时使系统执行各种任务。机器可读指令包括工作接收指令402,用于接收要在包括用于执行工作单元的多个处理单元集合(例如,如图1所示的多个线程组104)的
系统中调度的第一工作单元。每个处理单元集合可以包括一个处理单元或多个处理单元。每个相应的处理单元集合与对应的调度队列(例如,图1中的106)相关联。
[0067]
机器可读指令包括候选集合选择指令404,用于针对第一工作单元根据第一标准从多个处理单元集合中选择候选集合(例如,如在图3的任务306、308和312中选择候选线程组)。选择候选集合的第一标准可以包括随机标准(例如,图3中的任务312中的随机选择)、或与来自偏置分布的选择相关的标准(例如,任务308中的选择)、或与选择父线程组和来自偏置分布中的线程组相关的标准(例如,任务306中的选择)。
[0068]
偏置分布包含基于接近度标准与给定处理单元集合接近的处理单元集合,其中,接近度标准指定,如果第一处理单元集合与给定处理单元集合共享第二处理单元集合所不共享的指定资源(例如,缓存存储器、插槽或计算节点),则第一处理单元集合比第二处理单元集合更接近给定处理单元集合。
[0069]
机器可读指令包括工作入队指令406,用于将第一工作单元入队在与根据选择标准(例如,图3中的任务314中的选择标准)从候选集合中选择的所选处理单元集合相关联的调度队列中。
[0070]
图5是根据一些示例的系统500的框图。系统500包括硬件处理器502(或多个硬件处理器)。硬件处理器可以包括微处理器、多核微处理器的核、微控制器、可编程集成电路、可编程门阵列、或另一硬件处理电路。
[0071]
系统500包括存储介质504,存储介质504存储可在硬件处理器502上执行以执行各种任务的调度指令。可在硬件处理器上执行的调度指令可以指可在单个硬件处理器上执行的指令或可在多个硬件处理器上执行的指令。
[0072]
调度指令包括工作接收指令506,用于接收要在包括用于执行工作单元的多个处理单元集合的计算环境中调度的第一工作单元。每个相应的处理单元集合与对应的调度队列相关联。
[0073]
调度指令包括现有工作确定指令508,用于确定第一工作单元是否包括先前被调度在计算环境中的第一处理单元集合中执行的现有工作的任务。现有工作的任务可以包括作为现有工作的子任务的新工作单元,或从暂停的现有工作恢复的工作单元。
[0074]
调度指令包括候选集合选择指令510,用于响应于确定第一工作单元包括现有工作的任务,从多个处理单元集合中选择候选集合,其中,候选集合在第一处理单元集合被允许执行第一工作单元的工作类型的情况下包括第一处理单元集合,并且包括第二处理单元集合,第二处理单元集合是更接近第一处理单元集合的处理单元集合分布的一部分。
[0075]
在一些示例中,处理单元集合的分布是根据:基于接近度标准,识别更接近第一处理单元集合的多个处理单元集合的子集。
[0076]
如果第一处理单元集合不被允许执行第一工作单元的工作类型,则调度指令选择第二处理单元集合和第三处理单元集合作为候选集合。
[0077]
图6是根据一些示例的过程600的流程图。过程600可以由例如图1的调度器108执行。
[0078]
过程600包括接收(在602处)要在包括用于执行工作单元的多个处理单元集合的系统中调度的第一工作单元。每个相应的处理单元集合与对应的调度队列相关联。
[0079]
过程600包括针对第一工作单元根据第一标准从多个处理单元集合中选择(在604
处)候选集合,第一标准取决于第一工作单元是否是现有工作的一部分。
[0080]
在一些示例中,根据第一标准选择候选集合包括:响应于确定第一工作单元不是现有工作的任务,从多个处理单元集合中随机选择候选集合。
[0081]
在一些示例中,根据第一标准选择候选集合包括:响应于确定第一工作单元是由给定处理单元集合执行的现有工作的一部分,使用包含基于接近度标准与给定处理单元集合相接近的处理单元集合的分布来选择候选集合。
[0082]
过程600包括在系统中将第一工作单元入队在(在606处)与根据选择标准从候选集合中选择的所选处理单元集合相关联的调度队列中。选择标准基于减少与执行第一工作单元相关联的延迟。
[0083]
存储介质(例如,图4中的400或图5中的504)可以包括以下各项的任一项或某种组合:半导体存储器设备,如动态或静态随机存取存储器(dram或sram)、可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)和闪速存储器或其他类型的非易失性存储器设备;磁盘,如固定的软盘和可移动盘;另一种磁介质,包括磁带;光学介质,如光盘(cd)或数字视频盘(dvd);或另一类型的存储设备。应注意,上文讨论的指令可以在一个计算机可读或机器可读存储介质上提供,或者可替代地,可以在分布在具有可能多个节点的大型系统中的多个计算机可读或机器可读存储介质上提供。这种一个或多个计算机可读或机器可读存储介质被认为是物品(或制品)的一部分。物品或制品可以指任何制造的单个部件或多个部件。一个或多个存储介质或媒介可以位于运行机器可读指令的机器中、或者位于远程站点处,可以通过网络从远程站点下载机器可读指令以供执行。
[0084]
在前述描述中,阐述了许多细节以使得理解本文中所公开的主题。然而,可以在没有这些细节中的一些细节的情况下实践实施方式。其他实施方式可以包括上文所讨论的细节的修改和变化。所附权利要求旨在覆盖这样的修改和变化。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献