IP Library › Granted Patent US 12,705,102
Granted Patent B2
US 12,705,102 · App. 18/185,262 · Granted Aug 11, 2026

Parallelism with task dependencies in a curated experience

Inventors: Billy Ma (San Francisco, CA); Anthony Lai (San Francisco, CA); Liang Xie (San Francisco, CA); Huiyuan Li (San Francisco, CA); Aaron Chan (San Francisco, CA); Pranit Shah (San Francisco, CA)
G06F9/5038G06F2209/5017G06F2209/5018
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 12,705,102
App. No.
18/185,262
Filed
Mar 16, 2023
Granted
Aug 11, 2026
Kind
B2
Art Unit
2195
USPC
718/103
Abstract

A method in a computing environment for application start up includes: generating a directed acyclic graph (DAG) for tasks that are performed during application start-up; performing topological sorting of the tasks based on the DAG to define an order for the tasks; allocating a tenant-specific priority queue; loading the tasks in the tenant-specific priority queue in the order determined by the topological sorting; allocating a plurality of computing threads to executing the tasks; executing the tasks using the plurality of computing threads that were allocated, wherein a plurality of the tasks are executed in parallel, and the tasks are assigned to the computing threads in an order based on the order in which the task are loaded in the tenant-specific priority queue; preparing a start page for use in accessing the application; and causing the start page to be displayed on a user access device for accessing the application.

Claims (85)

1 . A method comprising:

writing application code to utilize parallel processing to speed up application loading at application start-up for an application accessible via a multi-tenant computing environment that includes multiple computing threads, wherein writing the application code comprises selecting an application plan for the application loading at the application start-up, wherein selecting the application plan comprises identifying a plurality of jobs to be executed to load the application at the application start-up and identifying a plurality of tasks within each of the plurality of jobs;

generating, for a first tenant, a directed acyclic graph (DAG) for the plurality of tasks to be executed to load the application at the application start-up, wherein the DAG comprises a plurality of nodes, wherein each of the plurality of nodes corresponds to a task of the plurality of tasks to be executed to load the application at the application start-up;

performing topological sorting of the plurality of tasks to be executed to load the application at the application start-up based on the DAG to define an order for the plurality of tasks, wherein performing the topological sorting of the plurality of tasks to be executed to load the application at the application start-up comprises:

(a) identifying a node of the DAG with zero indegree, wherein the identified node corresponds to a unique task of the plurality of tasks to be executed to load the application at the application start-up;

(b) storing the unique task of the plurality of tasks to be executed to load the application at the application start-up corresponding to the node with zero indegree in a stack and deleting the node with zero indegree from the DAG;

(c) deleting edges originating from the node with zero indegree from the DAG; and

(d) repeating operations (a) through (c) until no nodes with zero indegree are left in the DAG;

allocating from the multi-tenant computing environment a tenant-specific priority queue for the first tenant;

loading the plurality of tasks to be executed to load the application at the application start-up in the tenant-specific priority queue in the order determined by the topological sorting of the plurality of tasks to be executed to load the application at the application start-up;

allocating a plurality of computing threads from the multiple computing threads to execute the plurality of tasks;

executing the plurality of tasks using the plurality of computing threads that were allocated, wherein multiple tasks of the plurality of tasks are executed in parallel, and the plurality of tasks are assigned to the plurality of computing threads in an order based on the order in which the plurality of tasks are loaded in the tenant-specific priority queue;

preparing a start page for use in accessing the application; and

causing the start page to be displayed on a user access device for accessing the application.

2 . The method of claim 1 , comprising a registration phase, followed by a build-time phase, and followed by a run-time phase, wherein:

the registration phase occurs when a tenant organization registers for access to the application;

the build-time phase occurs before a user-request to access the application;

the run-time phase occurs after a user-request to access the application; and

the generating the DAG occurs during the build-time phase.

3 . The method of claim 2 , wherein the performing topological sorting of the plurality of tasks based on the DAG to define the order for the plurality of tasks occurs during the build-time phase.

4 . The method of claim 2 , wherein the performing topological sorting of the plurality of tasks based on the DAG to define the order for the plurality of tasks occurs during the run-time phase.

5 . The method of claim 2 , further comprising performing loop detection during the build-time phase.

6 . The method of claim 2 , further comprising performing loop detection during the run-time phase.

7 . The method of claim 1 , wherein the allocating the plurality of computing threads comprises allocating the plurality of computing threads up to a thread limit for the first tenant.

8 . The method of claim 1 , wherein loading the plurality of tasks in the tenant-specific priority queue in the order determined by the topological sorting of the plurality of tasks occurs during a run-time phase.

9 . The method of claim 1 , wherein the performing topological sorting of the plurality of tasks comprises performing topological sorting using a Khan's BFS based algorithm.

10 . The method of claim 1 , wherein the allocating the plurality of computing threads from the multiple computing threads to execute the plurality of tasks comprises:

allocating a first computing thread of the plurality of computing threads to execute a first task;

continuously allocating another computing thread of the plurality of computing threads to execute a different task after a prior computing thread begins executing one of the plurality of tasks until each of the plurality of computing threads has been allocated to execute one of the plurality of tasks or there are no tasks available for executing; and

allocating a same or new computing thread for task execution upon successful or failed completion of one of the plurality of tasks.

11 . The method of claim 1 , wherein the executing the plurality of tasks using the plurality of computing threads that were allocated comprises for each computing thread of the plurality of computing threads:

selecting a first task in the tenant-specific priority queue for execution;

determining if the first task is ready for execution;

if ready, executing the first task and removing the first task from the tenant-specific priority queue so that there is a new first task in the tenant-specific priority queue; and

if not ready: selecting a next task in the tenant-specific priority queue for execution, determining if the next task is ready for execution, and if the next task is ready for execution, executing the next task and removing the next task from the tenant-specific priority queue, and if the next task is not ready for execution, repeatedly selecting a new next task in the tenant-specific priority queue and determining if ready until a task is selected that is ready for execution.

12 . The method of claim 11 , wherein the executing the plurality of tasks using the plurality of computing threads that were allocated comprises for each computing thread of the plurality of computing threads:

determining if task execution failure occurred; and

returning a failed task to a front of the tenant-specific priority queue for execution by a computing thread of the plurality of computing threads when task execution failure occurred with the failed task.

13 . The method of claim 12 , further comprising re-executing the failed task up to three times.

14 . A multi-tenant computing environment configured to provide an application for use by a first tenant, the multi-tenant computing environment comprises:

a multi-tenant database for storing tenant data for a plurality of tenants for use with the application; and

a server comprising one or more processors that provide multiple computing threads for use in application start-up and an application startup controller;

wherein the application startup controller is configured to:

write application code to utilize parallel processing to speed up application loading at the application start-up for the application, wherein writing the application code comprises selecting an application plan for the application loading at the application start-up, wherein selecting the application plan comprises identifying a plurality of jobs to be executed to load the application at the application start-up and identifying a plurality of tasks within each of the plurality of jobs;

generate, for a first tenant, a directed acyclic graph (DAG) for the plurality of tasks to be executed to load the application at the application start-up, wherein the DAG comprises a plurality of nodes, wherein each of the plurality of nodes corresponds to a task of the plurality of tasks to be executed to load the application at the application start-up;

perform topological sorting of the plurality of tasks to be executed to load the application at the application start-up based on the DAG to define an order for the plurality of tasks, wherein to perform the topological sorting of the plurality of tasks to be executed to load the application at the application start-up the application startup controller is configured to:

(a) identify a node of the DAG with zero indegree, wherein the identified node corresponds to a unique task of the plurality of tasks to be executed to load the application at the application start-up;

(b) store the unique task of the plurality of tasks to be executed to load the application at the application start-up corresponding to the node with zero indegree in a stack and delete the node with zero indegree from the DAG;

(c) delete edges originating from the node with zero indegree from the DAG; and

(d) repeat operations (a) through (c) until no nodes with zero indegree are left in the DAG;

allocate from the multi-tenant computing environment a tenant-specific priority queue for the first tenant;

load the plurality of tasks to be executed to load the application at the application start-up in the tenant-specific priority queue in the order determined by the topological sorting of the plurality of tasks to be executed to load the application at the application start-up;

allocate a plurality of computing threads from the multiple computing threads to execute the plurality of tasks;

cause the plurality of computing threads that were allocated to execute the plurality of tasks, wherein multiple tasks of the plurality of tasks are executed in parallel, and the plurality of tasks are assigned to the plurality of computing threads in an order based on the order in which the plurality of tasks are loaded in the tenant-specific priority queue;

cause a start page for use in accessing the application to be prepared; and

cause the start page to be displayed on a user access device for accessing the application.

15 . The multi-tenant computing environment of claim 14 , wherein to execute the plurality of tasks, each computing thread of the plurality of computing threads:

selects a first task in the tenant-specific priority queue for execution;

determines if the first task is ready for execution;

if ready, executes the first task and removes the first task from tenant-specific priority queue so that there is a new first task in the tenant-specific priority queue; and

if not ready: selects a next task in the tenant-specific priority queue for execution, determines if the next task is ready for execution, and if the next task is ready for execution, executing the next task and removing the next task from the tenant-specific priority queue, and if the next task is not ready for execution, repeatedly selecting a new next task in the tenant-specific priority queue and determining if ready until a task is selected that is ready for execution.

16 . The multi-tenant computing environment of claim 14 , wherein to execute the plurality of tasks, each computing thread of the plurality of computing threads:

determines if task execution failure occurred; and

returns a failed task to a front of the tenant-specific priority queue for execution by a computing thread of the plurality of computing threads when task execution failure occurred with the failed task.

17 . A method comprising a registration phase, a build-time phase, and a run-time phase, wherein the registration phase occurs when a tenant organization registers for access to an application, the build-time phase occurs before a user-request to access the application, and the run-time phase occurs after the user-request to access the application, the method comprising:

writing application code to utilize parallel processing to speed up application loading at application start-up for the application accessible via a multi-tenant computing environment that includes multiple computing threads, wherein writing the application code comprises selecting an application plan for the application loading at the application start-up, wherein selecting the application plan comprises identifying a plurality of jobs to be executed to load the application at the application start-up and identifying a plurality of tasks within each of the plurality of jobs;

generating, for a first tenant during the registration phase, a directed acyclic graph (DAG) for the plurality of tasks to be executed to load the application at the application start-up, wherein the DAG comprises a plurality of nodes, wherein each of the plurality of nodes corresponds to a task of the plurality of tasks to be executed to load the application at the application start-up;

performing topological sorting of the plurality of tasks to be executed to load the application at the application start-up based on the DAG to define an order for the plurality of tasks, wherein performing the topological sorting of the plurality of tasks to be executed to load the application at the application start-up comprises:

(a) identifying a node of the DAG with zero indegree, wherein the identified node corresponds to a unique task of the plurality of tasks to be executed to load the application at the application start-up;

(b) storing the unique task of the plurality of tasks to be executed to load the application at the application start-up corresponding to the node with zero indegree in a stack and deleting the node with zero indegree from the DAG;

(c) deleting edges originating from the node with zero indegree from the DAG; and

(d) repeating operations (a) through (c) until no nodes with zero indegree are left in the DAG;

allocating from the multi-tenant computing environment a tenant-specific priority queue for the first tenant;

loading the plurality of tasks to be executed to load the application at the application start-up in the tenant-specific priority queue in the order determined by the topological sorting of the plurality of tasks to be executed to load the application at the application start-up;

allocating a plurality of computing threads from the multiple computing threads to execute the plurality of tasks;

executing the plurality of tasks using the plurality of computing threads that were allocated, wherein multiple tasks of the plurality of tasks are executed in parallel, and the plurality of tasks are assigned to the plurality of computing threads in an order based on the order in which the plurality of tasks are loaded in the tenant-specific priority queue;

preparing a start page for use in accessing the application; and

causing the start page to be displayed on a user access device for accessing the application.

18 . The method of claim 17 , further comprising performing loop detection during the build-time phase.

19 . The method of claim 17 , further comprising performing loop detection during the run-time phase.

20 . The method of claim 17 , wherein the executing the plurality of tasks using the plurality of computing threads that were allocated comprises for each computing thread of the plurality of computing threads:

selecting a first task in the tenant-specific priority queue for execution;

determining if the first task is ready for execution;

if ready, executing the first task and removing the first task from the tenant-specific priority queue so that there is a new first task in the tenant-specific priority queue; and

if not ready: selecting a next task in the tenant-specific priority queue for execution, determining if the next task is ready for execution, and if the next task is ready for execution, executing the next task and removing the next task from the tenant-specific priority queue, and if the next task is not ready for execution, repeatedly selecting a new next task in the tenant-specific priority queue and determining if ready until a task is selected that is ready for execution.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 16, 2023
From: MA, BILLY; LAI, ANTHONY; XIE, LIANG; LI, HUIYUAN; CHAN, AARON; SHAH, PRANIT
To: SALESFORCE, INC.
Reel/Frame 063007/0451 →
Continuity (1)
Related Publication 20240311195A1 · Sep 19, 2024
References Cited (164)
US 5428780A · England · 1995 [cited by examiner]
US 5577188A · Zhu · 1996 [cited by applicant]
US 5608872A · Schwartz et al. · 1997 [cited by applicant]
US 5649104A · Carleton et al. · 1997 [cited by applicant]
US 5715450A · Ambrose et al. · 1998 [cited by applicant]
US 5761419A · Schwartz et al. · 1998 [cited by applicant]
US 5819038A · Carleton et al. · 1998 [cited by applicant]
US 5821937A · Tonelli et al. · 1998 [cited by applicant]
US 5831610A · Tonelli et al. · 1998 [cited by applicant]
US 5873096A · Lim et al. · 1999 [cited by applicant]
US 5918159A · Fomukong et al. · 1999 [cited by applicant]
US 5963953A · Cram et al. · 1999 [cited by applicant]
US 6092083A · Brodersen et al. · 2000 [cited by applicant]
US 6161149A · Achacoso et al. · 2000 [cited by applicant]
US 6169534B1 · Raffel et al. · 2001 [cited by applicant]
US 6178425B1 · Brodersen et al. · 2001 [cited by applicant]
US 6189011B1 · Lim et al. · 2001 [cited by applicant]
US 6216135B1 · Brodersen et al. · 2001 [cited by applicant]
US 6233617B1 · Rothwein et al. · 2001 [cited by applicant]
US 6266669B1 · Brodersen et al. · 2001 [cited by applicant]
US 6295530B1 · Ritchie et al. · 2001 [cited by applicant]
US 6324568B1 · Diec et al. · 2001 [cited by applicant]
US 6324693B1 · Brodersen et al. · 2001 [cited by applicant]
US 6336137B1 · Lee et al. · 2002 [cited by applicant]
US D454139S · Feldcamp et al. · 2002 [cited by applicant]
US 6367077B1 · Brodersen et al. · 2002 [cited by applicant]
US 6393605B1 · Loomans · 2002 [cited by applicant]
US 6405220B1 · Brodersen et al. · 2002 [cited by applicant]
US 6434550B1 · Warner et al. · 2002 [cited by applicant]
US 6446089B1 · Brodersen et al. · 2002 [cited by applicant]
US 6535909B1 · Rust · 2003 [cited by applicant]
US 6549908B1 · Loomans · 2003 [cited by applicant]
US 6553563B2 · Ambrose et al. · 2003 [cited by applicant]
US 6560461B1 · Fomukong et al. · 2003 [cited by applicant]
US 6574635B2 · Stauber et al. · 2003 [cited by applicant]
US 6577726B1 · Huang et al. · 2003 [cited by applicant]
US 6601087B1 · Zhu et al. · 2003 [cited by applicant]
US 6604117B2 · Lim et al. · 2003 [cited by applicant]
US 6604128B2 · Diec · 2003 [cited by applicant]
US 6609150B2 · Lee et al. · 2003 [cited by applicant]
US 6621834B1 · Scherpbier et al. · 2003 [cited by applicant]
US 6654032B1 · Zhu et al. · 2003 [cited by applicant]
US 6665648B2 · Brodersen et al. · 2003 [cited by applicant]
US 6665655B1 · Warner et al. · 2003 [cited by applicant]
US 6684438B2 · Brodersen et al. · 2004 [cited by applicant]
US 6711565B1 · Subramaniam et al. · 2004 [cited by applicant]
US 6724399B1 · Katchour et al. · 2004 [cited by applicant]
US 6728702B1 · Subramaniam et al. · 2004 [cited by applicant]
US 6728960B1 · Loomans et al. · 2004 [cited by applicant]
US 6732095B1 · Warshavsky et al. · 2004 [cited by applicant]
US 6732100B1 · Brodersen et al. · 2004 [cited by applicant]
US 6732111B2 · Brodersen et al. · 2004 [cited by applicant]
US 6754681B2 · Brodersen et al. · 2004 [cited by applicant]
US 6763351B1 · Subramaniam et al. · 2004 [cited by applicant]
US 6763501B1 · Zhu et al. · 2004 [cited by applicant]
US 6768904B2 · Kim · 2004 [cited by applicant]
US 6772229B1 · Achacoso et al. · 2004 [cited by applicant]
US 6782383B2 · Subramaniam et al. · 2004 [cited by applicant]
US 6804330B1 · Jones et al. · 2004 [cited by applicant]
US 6826565B2 · Ritchie et al. · 2004 [cited by applicant]
US 6826582B1 · Chatterjee et al. · 2004 [cited by applicant]
US 6826745B2 · Coker · 2004 [cited by applicant]
US 6829655B1 · Huang et al. · 2004 [cited by applicant]
US 6842748B1 · Warner et al. · 2005 [cited by applicant]
US 6850895B2 · Brodersen et al. · 2005 [cited by applicant]
US 6850949B2 · Warner et al. · 2005 [cited by applicant]
US 7062502B1 · Kesler · 2006 [cited by applicant]
US 7069231B1 · Cinarkaya et al. · 2006 [cited by applicant]
US 7181758B1 · Chan · 2007 [cited by applicant]
US 7289976B2 · Kihneman et al. · 2007 [cited by applicant]
US 7340411B2 · Cook · 2008 [cited by applicant]
US 7356482B2 · Frankland et al. · 2008 [cited by applicant]
US 7401094B1 · Kesler · 2008 [cited by applicant]
US 7412455B2 · Dillon · 2008 [cited by applicant]
US 7508789B2 · Chan · 2009 [cited by applicant]
US 7620655B2 · Larsson et al. · 2009 [cited by applicant]
US 7698160B2 · Beaven et al. · 2010 [cited by applicant]
US 7730478B2 · Weissman · 2010 [cited by applicant]
US 7779475B2 · Jakobson et al. · 2010 [cited by applicant]
US 8014943B2 · Jakobson · 2011 [cited by applicant]
US 8015495B2 · Achacoso et al. · 2011 [cited by applicant]
US 8032297B2 · Jakobson · 2011 [cited by applicant]
US 8082301B2 · Ahlgren et al. · 2011 [cited by applicant]
US 8095413B1 · Beaven · 2012 [cited by applicant]
US 8095594B2 · Beaven et al. · 2012 [cited by applicant]
US 8209308B2 · Rueben et al. · 2012 [cited by applicant]
US 8275836B2 · Beaven et al. · 2012 [cited by applicant]
US 8457545B2 · Chan · 2013 [cited by applicant]
US 8484111B2 · Frankland et al. · 2013 [cited by applicant]
US 8490025B2 · Jakobson et al. · 2013 [cited by applicant]
US 8504945B2 · Jakobson et al. · 2013 [cited by applicant]
US 8510045B2 · Rueben et al. · 2013 [cited by applicant]
US 8510664B2 · Rueben et al. · 2013 [cited by applicant]
US 8566301B2 · Rueben et al. · 2013 [cited by applicant]
US 8646103B2 · Jakobson et al. · 2014 [cited by applicant]
US 11175950B1 · Yang · 2021 [cited by examiner]
US 11803478B1 · Gould · 2023 [cited by examiner]
US 20010044791A1 · Richter et al. · 2001 [cited by applicant]
US 20020072951A1 · Lee et al. · 2002 [cited by applicant]
US 20020082892A1 · Raffel · 2002 [cited by applicant]
US 20020129352A1 · Brodersen et al. · 2002 [cited by applicant]
US 20020140731A1 · Subramanian et al. · 2002 [cited by applicant]
US 20020143997A1 · Huang et al. · 2002 [cited by applicant]
US 20020162090A1 · Parnell et al. · 2002 [cited by applicant]
US 20020165742A1 · Robbins · 2002 [cited by applicant]
US 20030004971A1 · Gong · 2003 [cited by applicant]
US 20030018705A1 · Chen et al. · 2003 [cited by applicant]
US 20030018830A1 · Chen et al. · 2003 [cited by applicant]
US 20030066031A1 · Laane et al. · 2003 [cited by applicant]
US 20030066032A1 · Ramachandran et al. · 2003 [cited by applicant]
US 20030069936A1 · Warner et al. · 2003 [cited by applicant]
US 20030070000A1 · Coker et al. · 2003 [cited by applicant]
US 20030070004A1 · Mukundan et al. · 2003 [cited by applicant]
US 20030070005A1 · Mukundan et al. · 2003 [cited by applicant]
US 20030074418A1 · Coker et al. · 2003 [cited by applicant]
US 20030120675A1 · Stauber et al. · 2003 [cited by applicant]
US 20030151633A1 · George et al. · 2003 [cited by applicant]
US 20030159136A1 · Huang et al. · 2003 [cited by applicant]
US 20030187921A1 · Diec et al. · 2003 [cited by applicant]
US 20030189600A1 · Gune et al. · 2003 [cited by applicant]
US 20030204427A1 · Gune et al. · 2003 [cited by applicant]
US 20030206192A1 · Chen et al. · 2003 [cited by applicant]
US 20030225730A1 · Warner et al. · 2003 [cited by applicant]
US 20040001092A1 · Rothwein et al. · 2004 [cited by applicant]
US 20040010489A1 · Rio et al. · 2004 [cited by applicant]
US 20040015981A1 · Coker et al. · 2004 [cited by applicant]
US 20040027388A1 · Berg et al. · 2004 [cited by applicant]
US 20040128001A1 · Levin et al. · 2004 [cited by applicant]
US 20040186860A1 · Lee et al. · 2004 [cited by applicant]
US 20040193510A1 · Catahan et al. · 2004 [cited by applicant]
US 20040199489A1 · Barnes-Leon et al. · 2004 [cited by applicant]
US 20040199536A1 · Barnes-Leon et al. · 2004 [cited by applicant]
US 20040199543A1 · Braud et al. · 2004 [cited by applicant]
US 20040249854A1 · Barnes-Leon et al. · 2004 [cited by applicant]
US 20040260534A1 · Pak et al. · 2004 [cited by applicant]
US 20040260659A1 · Chan et al. · 2004 [cited by applicant]
US 20040268299A1 · Lei et al. · 2004 [cited by applicant]
US 20050050555A1 · Exley et al. · 2005 [cited by applicant]
US 20050091098A1 · Brodersen et al. · 2005 [cited by applicant]
US 20060021019A1 · Hinton et al. · 2006 [cited by applicant]
US 20080249972A1 · Dillon · 2008 [cited by applicant]
US 20090063414A1 · White et al. · 2009 [cited by applicant]
US 20090100342A1 · Jakobson · 2009 [cited by applicant]
US 20090177744A1 · Marlow et al. · 2009 [cited by applicant]
US 20110247051A1 · Bulumulla et al. · 2011 [cited by applicant]
US 20120042218A1 · Cinarkaya et al. · 2012 [cited by applicant]
US 20120066465A1 · Rabeler · 2012 [cited by examiner]
US 20120144039A1 · Watson · 2012 [cited by examiner]
US 20120218958A1 · Rangaiah · 2012 [cited by applicant]
US 20120233137A1 · Jakobson et al. · 2012 [cited by applicant]
US 20130212497A1 · Zelenko et al. · 2013 [cited by applicant]
US 20130218948A1 · Jakobson · 2013 [cited by applicant]
US 20130218949A1 · Jakobson · 2013 [cited by applicant]
US 20130218966A1 · Jakobson · 2013 [cited by applicant]
US 20130247216A1 · Cinarkaya et al. · 2013 [cited by applicant]
US 20140013318A1 · Rychikhin · 2014 [cited by examiner]
US 20200012521A1 · Wu · 2020 [cited by examiner]
US 20210303632A1 · Parthasarathy · 2021 [cited by examiner]
US 20210334358A1 · Medvinsky · 2021 [cited by examiner]
US 20220391263A1 · Che · 2022 [cited by examiner]
US 20230370390A1 · Balasubramanian · 2023 [cited by examiner]
US 20250165760A1 · He · 2025 [cited by examiner]
CN 113392132A · 2021 [cited by examiner]
Liu, CN113392132A Description Translation, Sep. 14, 2021, <https://worldwide.espacenet.com/publicationDetails/description?CC=CN&NR=113392132A&KC=A&FT=D&ND=3&date=20210914&DB=&locale=en_EP> pp. 1-9 (Year: 2021). [cited by examiner]