Dianne, Thanks for the comment.
On Jan 5, 6:59 am, "Dianne Hackborn" <[email protected]> wrote:
> Yeah that's basically it. The driver manages the thread pool, to make sure
> there will always be a thread available (up to a maximum number of threads)
> to handle work from it.
>
>
>
>
>
> On Sun, Jan 4, 2009 at 3:24 AM, gan <[email protected]> wrote:
>
> > Dianne, Thanks:-)
>
> > I add some log, and make sure
> > BR_SPAWN_LOOPER
> > cause all the spawn of second and later "Binder Thread"(which isMain
> > is false) display by "ps -p -t"
>
> > Seems BR_SPAWN_LOOPER is created in binder driver:
> > in kernel/include/linux/binder.h
> > I found following comments:
> > BR_SPAWN_LOOPER = _IO('r', 13),
> > /*
> > * No parameters. The driver has determined that a process has no
> > * threads waiting to service incomming transactions. When a
> > process
> > * receives this command, it must spawn a new service thread and
> > * register it via bcENTER_LOOPER.
> > */
>
> > I guess
> > "The driver has determined that a process has no threads waiting to
> > service incomming transactions"
> > means old "Binder Thread" can't be used, then the driver think this
> > process has no thread "waiting to service incomming transactions"
> > Then it want that process to create a new "Binder Thread".
>
> > Is there something wrong with my though?
>
> > Thanks&BstRgds
> > gan
>
> > On Jan 4, 4:52 pm, "Dianne Hackborn" <[email protected]> wrote:
> > > Yeah the only difference is that when the flag is set we don't allow that
> > > thread to exit like a normal thread pool thread (created for that
> > purpose),
> > > since exiting the main thread of the process is not desirable. :)
>
> > > On Sun, Jan 4, 2009 at 12:20 AM, gan <[email protected]> wrote:
>
> > > > Hi, Dianne: Thanks!
>
> > > > This question sent is because I set a log at
> > > > ProcessState::spawnPooledThread(bool isMain)
> > > > Found only the first calling of this API, "isMain" is true;
>
> > > > I found this flag only be used at following case in
> > > > IPCThreadState::joinThreadPool:
> > > > if(result == TIMED_OUT && !isMain) {
> > > > break;
> > > > }
>
> > > > It is true that the different of them(isMain is true or false) is
> > > > small,
>
> > > > From the log:
> > > > ProcessState::spawnPooledThread(false)
> > > > is called(from the log, only first calling of this API within one
> > > > process, isMain is true, later, it would always be false),
>
> > > > I guess it is called at IPCThreadState::executeCommand:
> > > > case BR_SPAWN_LOOPER:
> > > > mProcess->spawnPooledThread(false);
> > > > break;
>
> > > > So I not sure in what scenario BR_SPAWN_LOOPER is used?
>
> > > > Thanks&BstRgds
> > > > gan
>
> > > > On Jan 4, 3:27 pm, "Dianne Hackborn" <[email protected]> wrote:
> > > > > I don't know what you mean by a "NONEMain Binder Thread," but each
> > > > process
> > > > > using the Binder will have multiple threads running in a thread pool
> > to
> > > > > process incoming transactions and other work.
>
> > > > > Also there is no strong rule about the main thread ending up in the
> > > > thread
> > > > > pool (and nothing really special about that thread if it does go into
> > the
> > > > > thread pool vs. any of the other spawned threads); in fact for normal
> > app
> > > > > processes the main thread sits in the Java Looper class processing
> > the
> > > > main
> > > > > message queue of the process.
>
> > > > > The system process is a little different, in that I believe the main
> > > > thread
> > > > > gets put into the binder thread pool, and another thread is created
> > and
> > > > runs
> > > > > what serves as the main message queue/loop of the process, but it is
> > > > really
> > > > > only done this way due to convenience of implementation.
>
> > > > > On Sat, Jan 3, 2009 at 11:08 PM, gan <[email protected]> wrote:
>
> > > > > > Hi:
>
> > > > > > When I use "ps -p -t" to get the process and thread information, I
> > > > > > ofter found many "Binder Thread" belong to one Process.
>
> > > > > > My understanding is:
> > > > > > Only one "Binder Thread" is the "main Binder Thread" of that
> > process.
> > > > > > It would be blocked in ioctl used for "waiting to read". (later
> > to
> > > > > > execute some command by "BnXXXX::onTransact" according to read
> > > > > > contents. )
> > > > > > And it would be wake up by ioctl "writing" invoked by another
> > > > > > process's BpBinder::transact.
>
> > > > > > I found
> > > > > > /*spawn a new thread if we leave this out */
> > > > > > at the end of binder_thread_read.
>
> > > > > > My question is:
> > > > > > What the "NONEMain Binder Thread" used for?
> > > > > > Why new thread spawned?
> > > > > > What is it's relationship with old "main binder thread"?
>
> > > > > > Thanks&BstRgds
> > > > > > gan
>
> > > > > --
> > > > > Dianne Hackborn
> > > > > Android framework engineer
> > > > > [email protected]
>
> > > > > Note: please don't send private questions to me, as I don't have time
> > to
> > > > > provide private support. All such questions should be posted on
> > public
> > > > > forums, where I and others can see and answer them.
>
> > > --
> > > Dianne Hackborn
> > > Android framework engineer
> > > [email protected]
>
> > > Note: please don't send private questions to me, as I don't have time to
> > > provide private support. All such questions should be posted on public
> > > forums, where I and others can see and answer them.
>
> --
> Dianne Hackborn
> Android framework engineer
> [email protected]
>
> Note: please don't send private questions to me, as I don't have time to
> provide private support. All such questions should be posted on public
> forums, where I and others can see and answer them.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"android-framework" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-framework?hl=en
-~----------~----~----~----~------~----~------~--~---