Sorry, replied to the wrong mail.

On Wed, May 16, 2018 at 11:35 AM, Yang Bo <oaky...@gmail.com> wrote:

> We may do something like this:
> Keep a copy of the instance/metadata information in clientside, and when
> the SC is down, the client can still use the local information to visit
> services.
>
> On Wed, May 16, 2018 at 11:01 AM, Willem Jiang <willem.ji...@gmail.com>
> wrote:
>
>> Hi Wujimin
>>
>> Could you write some code snippet for using the lambda in the EventBus?
>> As you said earlier, the EventBus uses reflection which may cause some
>> performance issue.
>> But I don't know how the lambda can to the same thing in EventBus.
>>
>>
>> Willem Jiang
>>
>> Blog: http://willemjiang.blogspot.com (English)
>>           http://jnn.iteye.com  (Chinese)
>> Twitter: willemjiang
>> Weibo: 姜宁willem
>>
>> On Wed, May 16, 2018 at 8:49 AM, wjm wjm <zzz...@gmail.com> wrote:
>>
>> >  i have tested dynamic lambda, very fast, almost equals direct call
>> > so abandon interface solution  at last
>> > still use guava EventBus
>> > if cause performance problem, then rewrite a compatible EventBus
>> >
>> > static <T> T createLambda(Object instance, Method instanceMethod,
>> > Class<?> functionalIntfCls)
>> >     throws Throwable {
>> >   Method intfMethod = findAbstractMethod(functionalIntfCls);
>> >
>> >   MethodType invokedType = MethodType.methodType(functionalIntfCls,
>> > instance.getClass());
>> >   MethodType intfMethodType =
>> > MethodType.methodType(intfMethod.getReturnType(),
>> > intfMethod.getParameterTypes());
>> >   MethodHandle methodHandle = lookup.unreflect(instanceMethod);
>> >   MethodType instanceMethodType = MethodType
>> >       .methodType(instanceMethod.getReturnType(),
>> > instanceMethod.getParameterTypes());
>> >
>> >   CallSite callSite = LambdaMetafactory.metafactory(
>> >       lookup,
>> >       intfMethod.getName(),
>> >       invokedType,
>> >       intfMethodType,
>> >       methodHandle,
>> >       instanceMethodType
>> >   );
>> >   //noinspection unchecked
>> >   return (T) callSite.getTarget().invoke(instance);
>> > }
>> >
>> >
>> >
>> > Round 0:
>> > direct:281
>> > reflect:341
>> > lambda:297
>> >
>> > Round 1:
>> > direct:262
>> > reflect:329
>> > lambda:263
>> >
>> > Round 2:
>> > direct:259
>> > reflect:321
>> > lambda:259
>> >
>> > Round 3:
>> > direct:259
>> > reflect:322
>> > lambda:261
>> >
>> > Round 4:
>> > direct:255
>> > reflect:325
>> > lambda:259
>> >
>> >
>> > 2018-05-14 11:00 GMT+08:00 wjm wjm <zzz...@gmail.com>:
>> >
>> > > no instanceOf, no reflection during invoke
>> > > only get all interfaces from class when register a listener instance
>> > >
>> > > 2018-05-14 10:43 GMT+08:00 Willem Jiang <willem.ji...@gmail.com>:
>> > >
>> > >> We need to limited the events types, otherwise it could cause some
>> > trouble
>> > >> if the listener interesting bunch of events.
>> > >> BTW, can we set the event class type to the Listener?
>> > >> I'm not sure how much efforts the instanceOf operation need.
>> > >> If it is as heavy as the reflection, we may be back to the start
>> point.
>> > >>
>> > >>
>> > >> Willem Jiang
>> > >>
>> > >> Blog: http://willemjiang.blogspot.com (English)
>> > >>           http://jnn.iteye.com  (Chinese)
>> > >> Twitter: willemjiang
>> > >> Weibo: 姜宁willem
>> > >>
>> > >> On Mon, May 14, 2018 at 9:25 AM, wjm wjm <zzz...@gmail.com> wrote:
>> > >>
>> > >> > class XxxListener implements AListener,BListener...{
>> > >> > }
>> > >> >
>> > >> > All listener interfaces extends from a center type
>> > >> > when we got a listener instance, then loop all it's interfaces and
>> > cache
>> > >> > them
>> > >> > when publish event, get listener instance from cache and invoke
>> > >> >
>> > >> > 2018-05-13 10:07 GMT+08:00 Willem Jiang <willem.ji...@gmail.com>:
>> > >> >
>> > >> > > +1 for the performance enhancement.
>> > >> > > If it make sense we could let the event listener to subscribe a
>> > center
>> > >> > type
>> > >> > > of event.
>> > >> > > My question is how can we describe the event that the listener is
>> > >> > > interested?
>> > >> > >
>> > >> > >
>> > >> > >
>> > >> > > Willem Jiang
>> > >> > >
>> > >> > > Blog: http://willemjiang.blogspot.com (English)
>> > >> > >           http://jnn.iteye.com  (Chinese)
>> > >> > > Twitter: willemjiang
>> > >> > > Weibo: 姜宁willem
>> > >> > >
>> > >> > > On Sat, May 12, 2018 at 4:31 PM, wjm wjm <zzz...@gmail.com>
>> wrote:
>> > >> > >
>> > >> > > > currently we publish invocation start/startProcess/finish event
>> > for
>> > >> > every
>> > >> > > > invocation
>> > >> > > > now event based on guava EventBus
>> > >> > > > it's easy to use.
>> > >> > > >
>> > >> > > > but EventBus based on reflection, performance is not the best.
>> > >> > > > in the furture maybe we will add more invocaiton event, and
>> more
>> > >> module
>> > >> > > > will subscribe invocation event.
>> > >> > > >
>> > >> > > > so i want to publish invocation event, change from EventBus
>> event
>> > to
>> > >> > > event
>> > >> > > > listener loaded by SPI.
>> > >> > > >
>> > >> > > > what's you suggestion?
>> > >> > > >
>> > >> > >
>> > >> >
>> > >>
>> > >
>> > >
>> >
>>
>
>
>
> --
> Best Regards,
> Yang.
>



-- 
Best Regards,
Yang.

Reply via email to