[fpc-devel] Suggestion: reference counted objects
Giuliano Colla
giuliano.colla at fastwebnet.it
Tue Sep 23 11:11:08 CEST 2014
Il 22/09/2014 23:04, Boian Mitov ha scritto:
> If you are experienced in parallel processing, you should know the
> answer.
> This is a huge topic, and I have done number of sessions on some
> aspects of it, but here will give you a small example (again this is
> just a small example).
> You have a data object that needs to be processed by 600 threads, and
> when they all have consumed(finished with it) it, it needs to be
> disposed.
> With ref counting you create the object send it to all threads, each
> thread has its own reference to the object.
> When they all release the references the object is destroyed.
I agree with you that parallel processing is a very huge topic, but just
because of that I strongly disagree with your assumption that what can
be good for a very specific kind of application is good for every
application.
In addition to the observations of Marco, I can give you a small
counter-example:
You have a number of threads creating thousands of data objects, which
should be processed by "consumer" threads. Creating threads are unaware
of how data will be used (it may depend on active options, and it
follows the golden rule of "reusable code") so they can't send those
objects anywhere. Therefore pointers to those objects are inserted in a
list.
A "consumer" thread can either process a data object, and then dispose
of it, or leave it in the list for further processing, or move it to a
different list, again depending on the selected options.
This scheme can apply to quite a number of applications, from data
collected in a real-time process to data-base transactions, etc.
However you attempt to apply reference counting in this scheme, you'll
realize that either it doesn't work at all, or it forces you to add a
considerable amount of code, whose purpose would be only to fool
reference counting, and artificially increase or decrease reference count.
The same applies to your example, if it happens that when creating your
data object you don't know which threads will consume it, because
threads are created dynamically (captors activated and deactivated,
options enabled/disabled, users connecting and disconnecting, etc).
Giuliano
More information about the fpc-devel
mailing list